数据库并发冲突(Database Concurrency Conflict)是指:多个事务(或用户、线程)同时访问和操作数据库中的同一数据,且其中至少有一个是写操作(INSERT / UPDATE / DELETE),导致数据一致性、正确性受到威胁的现象。
简单来说:大家一起改同一份数据,可能互相打架。
数据库通常支持多用户同时访问(并发)。如果缺少合理控制,就会出现问题。
典型场景:
两个事务同时修改同一数据,后提交的覆盖先提交的。
示例:
一个事务读到了另一个未提交事务的数据。
示例:
同一事务内,两次读同一数据,结果不同(被别人改了)。
同一查询条件,两次查询结果行数不同(别人插入/删除了数据)。
通过隔离级别控制冲突:
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | ❌ | ❌ | ❌ |
| 读已提交 | ✅ | ❌ | ❌ |
| 可重复读 | ✅ | ✅ | ❌ |
| 串行化 | ✅ | ✅ | ✅ |
通过版本号或时间戳:
UPDATE account
SET balance = 150, version = version + 1
WHERE id = 1 AND version = 1;
读取时就加锁,防止别人改:
SELECT * FROM account WHERE id = 1 FOR UPDATE;
数据库并发冲突 = 多人同时操作同一数据,导致数据错误或不一致。
解决核心:控制访问顺序 + 保证事务一致性。
如果你愿意,我也可以用 例子 + 图解 或结合 MySQL / Java / 分布式场景 给你讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。