请教大家: 如何解决数据库并发操作导致的数据不一致问题?(mysql)

2016-04-07 09:59:55 +08:00
 palmers

情形如下:

  1. A 、 B 同时读取到信息 张三 20 男
  2. 这时 A 在页面修改 张三 25 男 保存
  3. 然后 B 修改信息 张三 20 女 保存

如此, A 的信息被覆盖了

谢谢大家啦!

5356 次点击
所在节点    程序员
26 条回复
yanyuan2046
2016-04-07 12:16:54 +08:00
说具体一下:
看需求,并发修改同一行数据,
如果期望 B 操作无效,用乐观锁
如果期望按时间顺序执行( B 也会执行),用 select for update
WangYanjie
2016-04-07 12:58:11 +08:00
你真的希望 A , B 的操作都生效吗?感觉会是一场灾难
msg7086
2016-04-07 13:11:01 +08:00
两种场景。
1. 单字段更新。写入数据库的时候只写入脏数据,这样就不会撤销之前的更改。
2. 完整对象更新。如 13 楼所说,确实有按照 B 的修改完整写入的需求。
david2016
2016-04-07 13:48:31 +08:00
如果是 innodb 存储引擎的表的话,在这种并发写的情况下:
两种决定因素:
1 )事物隔离级别是哪种
2 ) update 更新数据时候 where 查询条件列是否有索引,有的话是主键 /唯一 /非唯一索引
whahuzhihao
2016-04-07 14:04:16 +08:00
select for update 可以吧,一个人在操作一条数据的时候,另外一个连读这条数据的权限都不给
Lullaby
2016-04-07 14:27:15 +08:00
3L 真是目光如炬

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

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

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

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

© 2021 V2EX