当前位置:网站首页>mysql数据库基础:TCL事务控制语言
mysql数据库基础:TCL事务控制语言
2022-06-30 09:46:00 【持久的棒棒君】
事务
1、简介
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
整个单独单元作为一个不可分割的整体,如果单元中某条sql语句一旦执行失败或产生错误,整个单元将会回滚。
所有受到影响的数据将会返回到事务开始以前的状态;
如果单元中的所有sql语句均执行成功,则事务被顺利执行
回滚:简单来说就是撤销操作
2、事务的ACID属性*
1、原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
2、一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变化到另一个一致性状态
3、隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其他事务干扰,及一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰
4、持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
3、事务的创建
隐式事务:事务没有明显的开启和结束的标记。比如:insert、update、delete语句
显示事务:事务具有明显的开启和结束的标记。使用前提:必须先设置自动提交功能为禁用(set autocommit=0;)
使用步骤:
1、开启事务:
# 设置自动提交功能为禁用
set autocommit=0;
# 开启事务,在使用了上面一个语句的情况下可省略
start transaction; # 可选
2、编写事务中的sql语句(select、insert、update、delete)
3、结束事务
commit; # 提交
rollback; # 回滚
4、并发问题
4.1 描述
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
(1)脏读:对于两个事务T1,T2,T1读取了已经被T2
更新但还没有被提交的字段之后,若T2回滚,则T1读取的内容就是临时且无效的。
(2)不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段之后,T1再次读取同一个字段,读到的值就不同了。
(3)幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取了同一个表,就会多出几行。
4.2 设置隔离级别解决并发问题
通过设置隔离级别来组织并发问题的产生。
隔离级别:一个事务与其他事务隔离的程度称为隔离级别,不同隔离级别应对不同的干扰强度,隔离级别越高,数据一致性就越好,但并发性越弱。
数据库提供的四种事务隔离级别
(1)READ UNCOMMITTED(读未提交数据)
允许事务读取未被其他事务提交的变更。脏读、不可重复读和幻读的问题都会出现。
(2)READ COMMITTED(读已提交数据)
只允许事务读取已经被其他事务提交的变更。可以避免脏读,但不可重复度和幻读问题仍可能出现。
(3)REPEATABLE READ(可重复读)
确保事务可以多次从一个字段中读取相同的值。在这个事务持续期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复度,但不可解决幻读的问题。
(4)SERIALIZABLE(串行化)
确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作,所有并发问题都能避免,但性能十分低下。
oracle数据库支持的2中事务隔离级别:READ COMMITED,SERIAlIZABLE。默认为READCOMMITED
mysql数据库支持四种隔离级别,默认为REPEATABLE READ
4.3 设置隔离级别
- 查看当前隔离级别
select @@transaction_isolation;
- 修改隔离级别
设置当前mysql连接的隔离级别
# 将隔离级别修改为read uncommitted级别
set session transaction isolation level read uncommitted;
设置数据库系统的全局的隔离级别
set global transaction isolation level read committed;
5、回滚
使用savepoint设置回滚点
set autocommit = 0;
start transaction;
delete from account where id = 25;
savepoint a; # 设置保存点
delete from account where id = 28;
rollback to a; # 回滚到保存点
执行rollback to a这句后,会自动撤销指定回滚点后面所执行的操作
6、在事务中使用delete和truncate的区别
delete支持回滚,truncate不支持回滚
边栏推荐
- Yixian e-commerce released its first quarterly report: adhere to R & D and brand investment to achieve sustainable and high-quality development
- ArcGIS Pro脚本工具(5)——排序后删除重复项
- GD32 RT-Thread flash驱动函数
- Js獲取指定字符串指定字符比特置&指定字符比特置區間的子串【簡單詳細】
- MIT-6874-Deep Learning in the Life Sciences Week4
- The URL copied by the browser and pasted into the document is a hyperlink
- MySQL log management, backup and recovery of databases (1)
- Eth is not connected to the ore pool
- ModuleNotFoundError: No module named ‘_ swigfaiss‘
- MIT-6874-Deep Learning in the Life Sciences Week6
猜你喜欢

乡村振兴公益基金启动暨古茶树非遗保护公益行发布
[email protected]基于51系列单片机的智能仪器教具"/>技能梳理[email protected]基于51系列单片机的智能仪器教具

Rider does not prompt after opening unity script

"Kunming City coffee map" activity was launched again

MySQL index, transaction and storage engine of database (1)
[email protected]语音模块+stm32+nfc"/>技能梳理[email protected]语音模块+stm32+nfc

unable to convert expression into double array

Jump table introduction

UAV project tracking record 83 -- PCB diagram completion

“昆明城市咖啡地图”再度开启,咖啡拉近城市距离
随机推荐
IPhone address book import into Excel
Leetcode question brushing (I) -- double pointer (go Implementation)
The rising star of Goldshell STC box
keras ‘InputLayer‘ object is not iterable
WGet -- 404 not found due to spaces in URL
Questions about cookies and sessions
Leetcode question brushing (III) -- binary search (go Implementation)
G code explanation | list of the most important G code commands
技能梳理[email protected]+阿里云+nbiot+dht11+bh1750+土壤湿度传感器+oled
MIT-6874-Deep Learning in the Life Sciences Week6
Deploy lvs-dr cluster
MySQL log management, backup and recovery of databases (2)
South China Industrial Group launched digital economy and successfully held the city chain technology conference
光明行动:共同呵护好孩子的眼睛——广西实施光明行动实地考察调研综述
ArcGIS Pro脚本工具(5)——排序后删除重复项
GD32 RT-Thread DAC驱动函数
1033 To Fill or Not to Fill
How to seize the opportunity of NFT's "chaos"?
“昆明城市咖啡地图”活动再度开启
JS get the substring of the specified character position and the specified character position interval of the specified string [simple and detailed]