数据库事务隔离
事物隔离:
1 定义:多个并发线程同时操作同一条记录时,每个事物中的操作和数据不能被其他的事物干扰
2 修改丢失:
解决方案(同时修改同一个记录,数据库加排他锁,只能一个写)
3 脏读:
定义:脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读
解决方案(一个修改同一个记录,一个读同一个记录,把数据库的事务隔离级别调整到READ_COMMITTED)
规则:有共享锁(读锁)不能修改(即不能获取排他锁),有 排他锁(写锁)不能读(即不能获取共享锁)
4 不可重复读
定义:不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。
解决方案(一个修改同一个记录,一个读同一个记录,把数据库的事务隔离级别调整到REPEATABLE_READ)
释放共享锁在需要全部读完结束后在释放
4 幻读
定义:幻读是指当事务不是独立执行时发生的一种现象。
解决方案:把数据库的事务隔离级别调整到SERIALIZABLE_READ
事务1选择账号表中所有性别为女的行,并做了修改,修改完成后再查询下记录发现多了一条,
原来是事务2在事务1修改的过程中又添加了一条性别为女的行,为了解决这样问题(幻读),
只能将隔离级别再调高,每个事务按顺序执行,即串行化。
串行化参考链接:https://blog.csdn.net/lijiaming_99/article/details/103608147
5 第一类更新:
A事务撤销时,把已经提交的B事务的更新数据覆盖
这时候取款事务A撤销事务,余额恢复为1000,这就丢失了更新。(后事物先提交,前事物回滚)
6 第二类丢失更新:事务覆盖B事务已经提交的数据,造成B事务所做的操作丢失 (前事物后提交)
7 注意;
脏读<可重复读<幻读
不可重复读重点在修改,幻读重点在新增,删除
参考链接:https://blog.csdn.net/Yxueny/article/details/83789189?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control,
https://blog.csdn.net/qq_41776884/article/details/81608777?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control
参考公众号: