1)并发事务的问题

1) 并发事务的问题?

(1)读"脏"数据

复制代码
事务T1修改数据后T2读取了该数据,但是T1撤消了修改,
事务T1进行了回滚,导致事务T2读取的数据与数据库中的数据不一致。

(2)丢失修改

复制代码
两个事务读入同一数据并修改,T2的提交结果破坏了T1提交的结果。

(3)不可重复读

复制代码
事务T1读取数据后,事务T2修改数据并提交结果破坏了T1的提交结果,T1无法再现前一次的读取结果。

(4)幻读

复制代码
事务T1读取几行数据后,事务T2插入或删除了一些数据,T1再次查询中会发现多/少了一些数据。

并发控制的主要技术:

  • 封锁(Locking)

    封锁是最常见的并发控制机制。锁可以分为排他锁(X锁)和共享锁(S锁)。X锁不允许其他任何事务读或写数据,而S锁允许其他事务读数据但不能写。

  • 时间戳(Timestamp)

    时间戳机制:每个事务开始时都会被分配一个时间戳。当事务尝试读取或写入数据时,会检查数据上的时间戳并确定是否发生冲突。如果时间戳较新,则事务可以继续;否则,事务可能需要回滚或重试。

  • 乐观控制法(Optimistic Concurrency Control, OCC)

    OCC假设冲突较少,允许事务在没有锁的情况下运行,直到事务提交时才检查是否有冲突。如果检测到冲突,事务将被回滚并重新开始

  • 多版本并发控制法(multi-version concurrency control,MVCC)

关于MVCC可以看一下这篇博文:https://huaweicloud.csdn.net/63354fc7d3efff3090b53e5e.html

相关推荐
Jiangnan_Cai30 分钟前
docker 安装 milvus standalone 版本 + attu
数据库·docker·milvus
codeRichLife1 小时前
Mybatisplus3.5.6,用String处理数据库列为JSONB字段
java·数据库
消失在人海中1 小时前
oracle与MySQL数据库之间数据同步的技术要点
数据库·mysql·oracle
alicelovesu1 小时前
全栈开发者的“精神分裂”:当你的本地环境需要同时运行PHP、Node.js和Python
数据库·程序员
2501_915374351 小时前
Cypher 查询语言完全指南(2024最新版)—— Neo4j 图数据库实战教程
数据库·neo4j
CHEN5_022 小时前
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
数据库·redis·分布式·缓存
恰薯条的屑海鸥2 小时前
SQL注入篇-sqlmap的配置和使用
数据库·sql·安全·web安全·渗透测试·网络安全学习
阿蒙Amon2 小时前
C#最佳实践:为何优先使用as或is而非强制转换
服务器·数据库·c#
2401_831501733 小时前
MySQL 知识小结(一)
数据库·mysql
23级二本计科3 小时前
14.MySQL用C语言连接
数据库·mysql