共享锁(S):答应一个事件去读一行,阻止其他事件获得相同数据集的排他锁。
排他锁(X):答应获得排他锁的事件更新数据,阻止其他事件取得相同数据集的共享读锁和排他写锁。
通过查询条件对某一行进行加锁,commit后解锁
//读锁(共享锁)
SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE;
//写锁(排他锁)
SELECT * FROM table_name WHERE ... FOR UPDATE;
当我们进行增删改的时候Innodb是默认给对应行自动加上了写锁的,select查询不会加锁。
在行锁中,写锁和读锁都是其他会话只能查察无法修改该行数据,自己可以修改,但是我们给某一行加了读锁后,其他会话可以给这一行加读锁,不能加写锁。当我们给某一行加了写锁后,其他会话不能给该行加锁
3.16 悲观锁和乐观锁的区别