1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > mysql innodb排他锁_mysql 中innoDB引擎的事务喝共享锁喝排他锁

mysql innodb排他锁_mysql 中innoDB引擎的事务喝共享锁喝排他锁

时间:2021-03-11 02:38:50

相关推荐

mysql innodb排他锁_mysql 中innoDB引擎的事务喝共享锁喝排他锁

存储引擎 innoDB

事务和锁共存(事务本身就是利用锁机制来完成)

1、共享锁:

①当前事务可以进行查询和修改操作,其他事务(线程)必须等当前事务提交后才能进行操作,查询可以查,但是结果并不是当前事务提交前结果(两者数据不同步),修改必须等当前事务提交后才能正常操作

②如果给当前事务加了共享锁,其他事务(线程)也可以加共享锁,但是不能加排他锁

2、排他锁

①给当前事务(线程)加上排他锁后,其他事务(线程)既不能加共享锁也不能加排他锁,只有当前事务提交后才能操作

②当前事务可以进行查询和修改操作,其他事务(线程)必须等当前事务提交后才能进行操作,查询可以查,但是结果并不是当前事务提交前结果(两者数据不同步),修改必须等当前事务提交后才能正常操作

3、备注:

在高并发情况下,事务和行锁一起使用

共享锁【S锁】

又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

排他锁【X锁】

又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

共享锁与排它锁区别

1.共享锁只用于表级,排他锁用于行级。

2.加了共享锁的对象,可以继续加共享锁,不能再加排他锁。加了排他锁后,不能再加任何锁。

3.比如一个DML操作,就要对受影响的行加排他锁,这样就不允许再加别的锁,也就是说别的会话不能修改这些行。同时为了避免在做这个DML操作的时候,有别的会话执行DDL,修改表的定义,所以要在表上加共享锁,这样就阻止了DDL的操作。

4.当执行DDL(写操作)操作时,就需要在全表上加排他锁

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。