锁分类
排它锁(Exclusive Locks)和共享锁(Share Locks)
- 排它锁:加上排它锁,则其他的事务不能对它读取和修改。
- 共享锁:加上共享锁,则该数据库对象可以被其他事务读取,但不能修改。
基础语法
LOCK [ TABLE ]
name
IN
lock_mode
name:要锁定的现有表的名称(可选模式限定)。如果只在表名之前指定,则只锁定该表。如果未指定,则锁定该表及其所有子表(如果有)。
lock_mode:锁定模式指定该锁与哪个锁冲突。如果没有指定锁定模式,则使用限制最大的访问独占模式。可能的值是:ACCESS SHARE,ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE。
一旦获得了锁,锁将在当前事务的其余时间保持。没有解锁表命令;锁总是在事务结束时释放。
其他
访问共享锁:SELECT,任何只读操作都会获取该锁。
行排他锁:UPDATE,DELETE和INSERT
行锁:
FOR UPDATE锁使得SELECT语句可以获取行锁用于更新数据。
FOR UPDATE锁同样可以被DELETE命令获取,以及UPDATE命令当使用在确定的行用来修改数据的时候也会获取到该锁。