事务
-
事务:一条或多条SQL语句组成一个执行单位,要么都执行要么都不执行
-
特点(ACID):
A 原子性: 一个事务是不可再分割的整体,要么都执行要么都不执行
C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态
I 隔离性: 一个事务不受其他事务的干扰,多个事务互相隔离的
D 持久性:一个事务一旦提交了,则永久的持久化到本地
-
事务分类:
隐性(自动)事务: 没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete
显性事务: 具有明显的开启和结束
事务(显性)的使用
-
开启事务
set autocommit=0;
start transaction;
-
编写一组sql逻辑语句
注: sql语句支持的是insert,update,delete
设置回滚点
savepoint 回滚点名;
-
提交或回滚或回滚到指定地方
提交: commit;
回滚: rollback;
回滚到指定地方: rollback to 回滚点名;
并发事务
-
事务并发问题发生: 多个事务同时操作同一个数据库的相同数据时
-
并发问题:
脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
不可重复读:一个事务多次读取,结果不一样
幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据
-
解决方法: 设置事务隔离级别
-
隔离级别(MySQL默认隔离级别为repeatable read)
隔离级别 脏读 不可重复读 幻读 read uncommitted:读未提交 × × × read committed:读已提交 √ × × repeatable read:可重复读 √ √ × serializable:串行化 √ √ √ -
设置隔离级别
set session|global transaction isolation level 隔离级别名;
-
查看隔离级别
select @@tx_isolation;