MySQL事务中的锁
在事务ACID特性过程中,“锁”和“隔离级别”一起来实现“I”隔离性的作用
A:原子性,一个事务要么全部执行成功,要么失败就回滚
C:一致性,事务开启之前和事务执行结束后数据状态保持一致
I:隔离性,事务与事务之间是隔离的(锁,隔离级别)
D:持久性,事务操作完成要持久化
四种锁的介绍
排他锁:在事务执行期间,不允许其他事务执行修改操作
共享锁:在事务执行期间,允许所有事务执行查询操作
阻塞修改删除操作,不阻塞查询操作
乐观锁:谁先提交以谁为准
悲观锁:在事务执行期间,阻塞其他事务的查询操作
多版本并发控制MVCC
1)只阻塞修改类操作,不阻塞查询类操作
2)乐观锁的机制(谁先提交谁为准)
排它锁
共享锁
乐观锁
锁的粒度
MyIsam:低并发锁(表级锁)
Innodb:高并发锁(行级锁)
MySQL的隔离级别
show variables like '%iso%';
+-----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
| tx_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
read uncommitted # 未提交读 RU级别
read committed # 已提交读 RC级别
REPEATABLE-READ # 重复读(默认) RR级别
SERIALIZABLE ## 串行化
read uncommitted # 未提交读 RU级别
在事务中 没有commit提交事务 其他的终端也是可以看到变化的。
read committed # 已提交读 RC级别
在事务中 没有提交commit事务,其他终端无法查询。
无需退出重新登录就可以查询到数据的变化
REPEATABLE-READ # 重复读(默认) RR级别
在事务中 没有提交commit事务,其他终端无法查询。
需退出重新登录查询到数据的变化
双方都开启事务 然后查询一次