事务 INNODB
银行操作系统 用户A ==> 用户B
一个整体 事务 而言 要么全部执行成功 要么全部执行失败
begin; 开启事务,添加动作
rollback; #回滚
commit; # 提交
事务:
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,
事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,
这样每个事务都感觉不到有其他事务在并发地执行
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
事务隔离级别
事务的问题 :
脏读 一个事务读到另外一个事务还没有提交的数据 事务A进行修改操作,事务B进行查询操作 事务B查询到了事务A未提交的数据
不可重复读 一个事务读取同一条数据,查询出两次不同的结果
事务A查询操作 101 事务B 101 进行修改(提交了) ,但是事务A又进行了一次查询101,发现两次查询数据不同
幻读: 事务A查询数据108的时候 发现这个数据在表中不存在, 事务B 咋做108的添加,进行了事务提交,事务A做108的添加,报错,
但是事务A查询的时候 ,这个108的数据又没有
查看事务隔离级别
SELECT @@transaction_isolation;
设置事务隔离级别 session 当此会话 global 全局
set session transaction isolation level Read Uncommitted
set session transaction isolation level Read Committed
set session transaction isolation level Repeatable Read (默认)
set session transaction isolation level Serializable
4个隔离权限,权限等级越高,安全性越高 效率越低
脏读 不可重复读 幻读
Read Uncommitted 出现 出现 出现
Read Committed 不会 出现 出现
Repeatable Read 不会 不会 出现
Serializable 不会 不会 不会