- 主题:mysql的怪事: 先读数据,根据读的结果再写,结果读出的结果是
一个字段 status,根据业务逻辑进行状态变换。 比如,0变成1, 1变成2 , 。。。。
第一次进行状态变换, 0->1 从未出过问题
第二次进行状态变换, 先从mysql读出status, 按理应该是1, 数据库里看到的也是1,但是死活读出来是2,这时我的程序就报错了。可是按程序的顺序我还没有做执行状态变换逻辑啊。怎么就很稳定的读出我未来要更新的结果啊
我又做了个实验,因为这些数字都是用宏记录的,所以我把2改成其他比如92, 结果很稳定的读出92,
请大侠们帮忙啊
--
FROM 124.204.53.*
实在是没看懂你说的是啥
【 在 wst 的大作中提到: 】
: 一个字段 status,根据业务逻辑进行状态变换。 比如,0变成1, 1变成2 , 。。。。
: 第一次进行状态变换, 0->1 从未出过问题
: 第二次进行状态变换, 先从mysql读出status, 按理应该是1, 数据库里看到的也是1,但是死活读出来是2,这时我的程序就报错了。可是按程序的顺序我还没有做执行状态变换逻辑啊。怎么就很稳定的读出我未来要更新的结果啊
: ...................
--
FROM 223.72.67.*
没看懂,不可能db里存1你读出来是2
【 在 wst (wst) 的大作中提到: 】
: 一个字段 status,根据业务逻辑进行状态变换。 比如,0变成1, 1变成2 , 。。。。
: 第一次进行状态变换, 0->1 从未出过问题
: 第二次进行状态变换, 先从mysql读出status, 按理应该是1, 数据库里看到的也是1,但是死活读出来是2,这时我的程序就报错了。可是按程序的顺序我还没有做执行状态变换逻辑啊。怎么就很稳定的读出我未来要更新的结果啊
: ...................
--
FROM 114.248.217.116
不贴代码别人咋帮忙
【 在 wst 的大作中提到: 】
: 一个字段 status,根据业务逻辑进行状态变换。 比如,0变成1, 1变成2 , 。。。。
: 第一次进行状态变换, 0->1 从未出过问题
: 第二次进行状态变换, 先从mysql读出status, 按理应该是1, 数据库里看到的也是1,但是死活读出来是2,这时我的程序就报错了。可是按程序的顺序我还没有做执行状态变换逻辑啊。怎么就很稳定的读出我未来要更新的结果啊
: ...................
--
FROM 222.131.126.*
“数据库里看到的也是1,但是死活读出来是2”.
那只能说明你的程序哪里错了。
【 在 wst 的大作中提到: 】
: 一个字段 status,根据业务逻辑进行状态变换。 比如,0变成1, 1变成2 , 。。。。
: 第一次进行状态变换, 0->1 从未出过问题
: 第二次进行状态变换, 先从mysql读出status, 按理应该是1, 数据库里看到的也是1,但是死活读出来是2,这时我的程序就报错了。可是按程序的顺序我还没有做执行状态变换逻辑啊。怎么就很稳定的读出我未来要更新的结果啊
: ...................
--
FROM 125.69.45.*
用的hibernate吗
--
FROM 118.247.86.*
1.代码流程报错,说明你逻辑不完善
2.status读,一种可能是缓存,一种是事务并发,如不可重复读邓,解决方法是读写锁
3.不了解你说的宏记录是啥东西,多打断点监听,一般问题不大
--
FROM 123.119.78.*
感谢,我也在查事务的问题
【 在 istend (天王盖地虎) 的大作中提到: 】
: 1.代码流程报错,说明你逻辑不完善
: 2.status读,一种可能是缓存,一种是事务并发,如不可重复读邓,解决方法是读写锁
: 3.不了解你说的宏记录是啥东西,多打断点监听,一般问题不大
: ...................
--
FROM 124.202.186.*
找到原因了,事务嵌套导致的错误
【 在 istend (天王盖地虎) 的大作中提到: 】
: 1.代码流程报错,说明你逻辑不完善
: 2.status读,一种可能是缓存,一种是事务并发,如不可重复读邓,解决方法是读写锁
: 3.不了解你说的宏记录是啥东西,多打断点监听,一般问题不大
: ...................
--
FROM 124.202.186.*
遇到脏读了呗,了解一下事务的隔离级别
--
FROM 222.128.78.*