⑴ 【后端】读锁,写锁,表锁,行锁,意向锁
锁的概念在数据库管理中至关重要,本文将重点介绍五个类型锁:读锁(S)、写锁(X)、表锁、行锁、意向锁。它们的兼容性、命名、写法、现象、写法、表锁与行锁的差异、意向锁的机制和兼容性等都将逐一探讨。
读锁与写锁的兼容性方面,读锁可以与读锁兼容,而读锁与写锁、写锁与写锁之间则不能兼容。在实际操作中,写锁被隐式加上,读锁则不能自动隐式加锁。
在读锁与写锁的写法中,以行锁为例,当执行更新操作时,写锁将被自动加上。如果尝试在查询时不加读锁(S),则该查询不会被阻塞,读取的数据可能为未提交的版本。
命名的歧义值得注意,读锁与写锁的官方命名分别为共享锁与排他锁,但读锁的命名可能给用户带来误导。在实际操作中,读锁可以被隐式加上写锁,这与读锁的命名不完全匹配。
表锁与行锁的写法与兼容性不同,表锁需要在解锁时使用特定命令,且commit与rollback无法解锁已上锁的表。表锁的写法与行锁有明显差异,表锁的兼容性考虑了读锁与写锁对表的互斥操作,以及避免死锁的发生。
意向锁的作用在于优化性能,当数据库需要加表锁时,它会自动创建表级别的意向锁,这避免了与每行锁的逐一对比。意向锁分为共享与排他两种类型,它们在实现机制上具有独特之处,且能够避免冲突。
意向锁的兼容性遵循一定的规则,以确保数据库的正常运行。在实际应用中,意向锁的自动添加减少了系统开销,提高了查询效率。