事务
事务的4个条件
- 原子性(A):事务是最小单位,不可再分
- 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
- 隔离性(I):事务A和事务B之间具有隔离性
- 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
事务的操作
1、begin; 开始一个事务
2、rollback; 事务回滚,回到上一个操作
3、commit; 事务确定
set AUTOCOMMIT=0; 禁止自动提交
set AUTOCOMMIT=1; 开启自动提交
提交事务
mysql> start transaction; #手动开启事务
mysql> insert into t_user(name) values('pp');
......
mysql> commit; #commit之后即可改变底层数据库数据
回滚事务
mysql> start transaction;
mysql> insert into t_user(name) values('yy');
mysql> rollback;
事务隔离级别
- 读未提交:read uncommitted 脏读 不可重复读 幻读
- 读已提交:read committed 不可重复读 幻读
- 可重复读:repeatable read 幻读
- 串行化:serializable
设置事务级别
//全局的
set global transaction isolation level read uncommitted;
//当前会话
set session transaction isolation level read uncommitted;
事务导致的问题
1、脏读
事务a读取了事务b修改但是未提交的数据
2、不可重复度
事务A读取了事务b提交的数据,导致两次读取的数据不一致。
3、幻读
查询一条数据不存在,但是又不可插入。
https://zhuanlan.zhihu.com/p/52677680
https://blog.csdn.net/w_linux/article/details/79666086

浙公网安备 33010602011771号