mysql - "Repeatable read"与乐观

标签 mysql sql oracle postgresql transactions

<分区>

并发控制和事务隔离级别有什么区别?

我清楚地理解了它们中的每一个,但是,我在将它们相互联系起来时遇到了一些问题。具体来说,我看到它们的功能有一些重叠,我不确定什么时候应该使用一个而不是另一个。还是应该两者一起使用?

另外,悲观锁定与可重复读取是什么意思?可重复读取不是已经暗示所有要编辑的值都将被锁定吗?那么为什么还需要悲观锁呢?

最佳答案

问题的出现是因为有两种并发控制模型,有时会被 SQL 实现混用。

  1. 锁定,如 2PL(双相锁定)
  2. 版本,如 MVCC(多版本并发控制)

悲观意味着读取的行被锁定。乐观意味着读取的行未锁定。

Repeatable Read 的经典 2PL 实现总是悲观的。 Repeatable Read 的多版本实现是乐观的。它不会锁定为 SELECT 语句读取的行,并允许其他事务修改已在 SELECT 中读取的行。此类更改对执行 SELECT 的事务不可见,直到它被提交。

关于mysql - "Repeatable read"与乐观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668531/

相关文章:

php - MySQL 在同一查询中使用查询结果

php - 西类牙文字符显示不正确

sql - 计算两个表之间的重叠值?

php - 所有查询都是大写的,带有 oracle 驱动程序和 laravel 查询生成器

sql - join 子句与 where 子句中的 oracle sql 自连接过滤器

php - MySQL查询无法读取PHP变量

mysql - 是否可以将根据条件计算的值插入到 mysql 中?

php - 将 SQL 查询的值存储在变量中

父子链的SQL查询

oracle - Oracle 解析器如何处理序列