行級鎖:
insert,update,delete,select...for update 執行這些語句時會自動為修改的記錄行添加行級鎖,直到事務rollback或commit時才會釋放鎖資源。
表級鎖:
1.行共享 (ROW SHARE)
表示在行上加排他锁,在表上加共享锁,表级共享、行级排他。
2.行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁,禁止同时使用EXCLUSIVE,SHARE ROW EXCLUSIVE锁。不禁止用户增删改表记录。
3.共享行排他(SHARE ROW EXCLUSIVE)
SHARE ROW EXCLUSIVE 比 SHARE MODE 限制更强一些,它只允许其他的事務查询或者用select for update来锁定记录,但是不允许其他事務获取SHARE mode的锁,更不要提更改数据了。而SHARE mode,允许其他事務或许share mode的锁,也可以通过select for update 来锁定记录。
4.共享锁(SHARE)
如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。直到查詢完成,共享鎖才得以釋放。共享鎖的表自己也是不能修改數據的,所以一般不會給行上共享鎖。
对这张表加一个共享锁。这么做是为了防止别的会话通过DDL语句修改这张表的表结构。DDL语句要修改了这张表,就必须给表加上排他锁。但是现在给表加了共享锁了,也就排斥了DDL去加排他锁。
5.排他(EXCLUSIVE)
排他锁很好理解,是自己独占资源。其它会话想再在同一对象上加共享或排他锁都是不允许的。不过其它会话可以读,这也证明普通的读是不上锁的。如果查的对象被修改,查询操作还会会被重定向到对应的撤销块(原来的数据),以保证事务事物隔离和读一致。
对修改的那一行加一个排他锁,别的会话不能修改这一行。但是我对整张表加的是共享锁而不是排他锁,
所以别的会话还是可以修改其他行(也经历1、2两个步骤)。