mysql共享锁和独占锁sql语句
共享锁
Shared Locks,简称S锁,可以多个事务共同持有,获得共享锁的事务只能读数据,不能修改数据。
假如事务1⾸先获取了⼀条记录的S锁,如果事务2想要获取这条记录的S锁,那么事务T2也能获得该锁,事务1和2在该记录上同时持有S锁。
加锁方式:
SELECT … LOCK IN SHARE MODE;
普通的SELECT语句后边加LOCK IN SHARE MODE
当事务执⾏了该语句,它会为读取到的记录加S锁
独占锁
Exclusive Locks,简称X锁。只能被一个事务获取,获得X锁的事务即能读数据又能修改数据。
如果事务1⾸先获取了⼀条记录的X锁之后,那么不管事务2接着想获取该记录的S锁还是X锁都会被阻塞,直到事务1提交。如果事务1获取到S锁,事务2想要获取该记录X锁,此操作会被阻塞,直到事务1提交后才能获取。
加锁方式:
SELECT … FOR UPDATE;
普通的SELECT语句后边加FOR UPDATE
总结:S锁和S锁可以共有的,S锁和X锁是只能存在一个,X锁和X锁也只能存在一个。