Python 写的 mysql 升级倒着运行的问题

2019-02-15 17:59:04 +08:00
 334862132
升级用的 python 里面的 mysql 原生写的
数据库有 3 个状态 0 1 2 ,原状态为 0
第一个 sql 升级状态把 0 升级为 1(处理中)
之后写了一个事物
处理成功后把数据库状态升级为 2 失败则升级数据库为 0 (都同时升级其他字段)

运行有的时候网络波动 会出现处理完成后状态为 1 并且事物所处理的字段也填充上了,这是什么鬼
1728 次点击
所在节点    Python
3 条回复
mayorbryant
2019-02-15 18:08:57 +08:00
感觉楼主描述的有点绕啊,根据我的理解,你这个现象很正常啊,说明回写为 2 的操作并没有执行成功啊,
在你写的事务中应该有这样的伪代码

start transaction
done something
if done:
回写 2
transaction commit
else:
回写 0
transaction rollback
xpresslink
2019-02-15 18:09:53 +08:00
处理成功后把数据库状态升级为 2 失败则升级数据库为 0 (都同时升级其他字段)

不太理解你说的,用数据库事务去处理如果失败则回滚到前一个状态,应该是 1 啊,你失败则升级为 0 是什么鬼。
ksedz
2019-02-15 18:14:48 +08:00
可能有多线程,或者重复数据导致了覆盖
解决办法是第一个 sql 加个条件,只处理状态为 0 的数据

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

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

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

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

© 2021 V2EX