老师,模拟银行转账
来源:2-4 事务的隔离级别
优土巴
2020-02-05 21:21:57
数据表如上图
第一步: 开启事务A : START TRANSACTION;
第二步:开启事务B: START TRANSACTION;
第三步:事务B执行减去100:
UPDATE t_money SET money=money-100 WHERE id = 1
第四步:事务A增加1000元:
UPDATE t_money SET money=money+1000 WHERE id = 1;
则会出现:
在生产环境中,是否也会出现这种错误提示?
如果在生产环境也能出现这种错误提示,能否直接回滚事务A。向客户端提示 转账失败。
然后 提交事务B。金额就变成了 4900。
这样就不需要设置隔离级别了。 这类似的问题在真实的业务上是这样解决吗?
1回答
时间,
2020-02-06
同学,你好。
Mysql数据库采用InnoDB引擎,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。
两个事务A和事务B,他们两个都存在update 同一条记录,A 先修改,但是没有提交事务,B也想修改但是一直等,直到等到了超过了innodb_lock_wait_timeout所设置的时间,就会报出此异常。
在生产环境中,若出现上述操作也是会有报错的。可以找到对应线程号执行命令kill +线程号即可解决。
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
相似问题