银行转账业务模拟问题

来源:2-4 事务的隔离级别

洛奇丶大

2019-08-16 18:28:43

##############################事务A####################################
# 第一步、开启读未提交
SET SESSION TRANSACTION ISOLATION  LEVEL READ UNCOMMITTED
# 第二步、开启事务
START TRANSACTION

# 第三步、查sal(5000)
# 第六步、再次查询sal(4900)
SELECT ename,sal
FROM t_emp_new
WHERE ename="SMITH"

# 第七步、模拟有人汇款(此时B事务未commit或rollback)
# 第七步会一直卡死,直到B事务commit或rollback
# 这里无法模拟视频中老师转账的例子
UPDATE t_emp_new
SET sal=sal+1000
WHERE ename="SMITH"


COMMIT
ROLLBACK





##############################事务B####################################
# 第四步、开启另一个事务
START TRANSACTION

# 第五步、模拟支付100元
UPDATE t_emp_new
SET sal=sal-100
WHERE ename="SMITH"


COMMIT
ROLLBACK



问题出在哪里?

写回答

2回答

好帮手乔木

2019-08-18

同学你好:

所有的事务都要需要提交才会继续下一次的事务提交,所以同学的操作违背事务的隔离性。

隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

老师的举例可是没有进行两个事务都去修改数据库的操作的冲突,他·进行的操作是查找另外一个事务修改数据后,能否看到数据的变化。

如果我解决了同学的问题,请采纳!学习愉快^_^。

0

洛奇丶大

提问者

2019-08-16

源码放上了,麻烦老师测试一下。我并没有用串行的隔离级别

0

0 学习 · 2669 问题

查看课程