数据库服务器在内部锁表中存储锁。当数据库服务器读取一行时,它会检查锁表中是否列出了该行或与该行相关联的页、表或数据库。 如果锁表中已列出,数据库服务器还必须检查锁定类型。
锁定类型 | 描述 | 通常用于添加锁定的语句 |
---|---|---|
S | 共享锁定 | SELECT |
X | 互斥锁定 | INSERT, UPDATE, DELETE |
U | 更新锁定 | 更新游标中的 SELECT |
B | 字节锁定 | 任何更新 VARCHAR 列的语句 |
只有在缩小 VARCHAR 列中数据值的大小时,才会生成字节锁定。只有前滚和回滚操作才存在字节锁定,因此只有在处理一个使用日志记录的数据库时,才创建字节锁定。只有在使用行级别锁定时,字节锁才会出现在 onstat -k 输出中;否则,字节锁就会与页锁合并。
另外,锁表还可能存储意向锁,这是一种与前面显示的相同的锁定类型。 在某些情况下,用户可能需要注册要锁定某个项目的可能意向,从而使其他用户不能对该项目加上锁定。
保持 X 锁定 | 保持 U 锁定 | 保持 S 锁定 | |
---|---|---|---|
请求 X 锁定 | 否 | 否 | 是 |
请求 U 锁定 | 否 | 否 | 是 |
请求 S 锁定 | 否 | 是 | 是 |