书上说的是"一个事务修改了另一个未提交事务修改过的数据",然后几乎全网举的都是同一个例子,就是两个事务修改了数据,还没提交,然后其中一个事务回滚,另一个事务提交,提交的这个事务其实数据也被回滚了。
我的问题是必须是有回滚才会导致脏写吗?比如我两个事务修改了同一个数据,一个先提交,然后另一个再提交,这算脏写吗?
1
monsterxx03 2021-03-11 12:03:02 +08:00
满足 ACID 的 RDBMS 就不会有脏写, 你说的那个例子, 如果修改的是同一条数据, update 会上 exclusive lock, 第二次 update 会直接停在那, 第一次 update rollback, 第二次 update commit, 不会 roll back.
|
2
zxCoder OP @monsterxx03 额 其实我想问的是脏写的定义
|
3
monsterxx03 2021-03-11 12:25:49 +08:00
额, 一定要说定义的话, 第二个例子里, 如果第二次提交后最终结果是第一次的结果, 那应该算脏写.
不过纠结一个事实上不存在的操作意义不大, 关注下脏读的条件还有点用. |
4
zxCoder OP @monsterxx03 知道了 谢谢
|
5
joApioVVx4M4X6Rf 2021-03-11 16:42:42 +08:00
@monsterxx03 我也想问问脏读是什么鬼,现在开发的项目,一直没遇到过这种问题
|
6
monsterxx03 2021-03-11 16:48:47 +08:00
@v2exblog 只谈 MySQL 的话, 默认配置下也不会发生有脏读, 除非自己把 isolation level 设置成 read uncomitted. 完整解释很麻烦, 看看 isolation level 相关的文章吧.
|