关于数据库的“脏写”定义

2021-03-11 11:30:03 +08:00
 zxCoder

书上说的是"一个事务修改了另一个未提交事务修改过的数据",然后几乎全网举的都是同一个例子,就是两个事务修改了数据,还没提交,然后其中一个事务回滚,另一个事务提交,提交的这个事务其实数据也被回滚了。

我的问题是必须是有回滚才会导致脏写吗?比如我两个事务修改了同一个数据,一个先提交,然后另一个再提交,这算脏写吗?

1622 次点击
所在节点    数据库
7 条回复
monsterxx03
2021-03-11 12:03:02 +08:00
满足 ACID 的 RDBMS 就不会有脏写, 你说的那个例子, 如果修改的是同一条数据, update 会上 exclusive lock, 第二次 update 会直接停在那, 第一次 update rollback, 第二次 update commit, 不会 roll back.
zxCoder
2021-03-11 12:18:03 +08:00
@monsterxx03 额 其实我想问的是脏写的定义
monsterxx03
2021-03-11 12:25:49 +08:00
额, 一定要说定义的话, 第二个例子里, 如果第二次提交后最终结果是第一次的结果, 那应该算脏写.

不过纠结一个事实上不存在的操作意义不大, 关注下脏读的条件还有点用.
zxCoder
2021-03-11 12:32:38 +08:00
@monsterxx03 知道了 谢谢
0x0208v0
2021-03-11 16:42:42 +08:00
@monsterxx03 我也想问问脏读是什么鬼,现在开发的项目,一直没遇到过这种问题
monsterxx03
2021-03-11 16:48:47 +08:00
@v2exblog 只谈 MySQL 的话, 默认配置下也不会发生有脏读, 除非自己把 isolation level 设置成 read uncomitted. 完整解释很麻烦, 看看 isolation level 相关的文章吧.
pedia
2021-03-14 18:15:50 +08:00
@zxCoder MySQL 不存在脏写,因为采用 2PL 加锁机制, 所以你说的情况不会发生。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/760615

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX