银行转账业务模拟问题
来源: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-16
源码放上了,麻烦老师测试一下。我并没有用串行的隔离级别