Dey*_*ang 8 mysql sql oracle postgresql transactions
并发控制和事务隔离级别有什么区别?
我清楚地了解每一个,然而,我有一些问题彼此相关.具体来说,我看到他们的功能有些重叠,我不确定何时应该使用一个而不是另一个.或者两者都应该一起使用?
说重复读取的悲观锁定是什么意思?不可重复的读取是否意味着要锁定的所有值都将被锁定?那么为什么还需要悲观锁定呢?
并发控制是处理并发连接引起的问题的任何机制的通用术语.
事务隔离级别是MySQL实现并发控制的一种机制.
有关MySQL如何在没有悲观锁定的情况下实现的文档,请参阅Consistent Nonlocking ReadsREPEATABLE READ:
一致读取不会对其访问的表设置任何锁定,因此其他会话可以在对表执行一致读取的同时自由修改这些表.
假设您正在以默认
REPEATABLE READ隔离级别运行.当您发出一致读取(即普通SELECT语句)时,InnoDB会为您的事务提供一个时间点,您的查询将根据该时间点查看数据库.如果另一个事务删除了一行并在分配了您的时间点后提交,则您不会将该行视为已删除.插入和更新的处理方式类似.
出现这个问题是因为有两种并发控制模型,它们有时会被 SQL 实现混合使用。
悲观意味着读取的行被锁定。乐观意味着读取的行没有被锁定。
可重复读的经典 2PL 实现总是悲观的。可重复读的多版本实现是乐观的。它不会锁定为 SELECT 语句读取的行,并允许其他事务修改已在 SELECT 中读取的行。执行 SELECT 的事务在提交之前,此类更改是不可见的。