数据库事务隔离

事物隔离:

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

参考公众号:

 

posted @ 2020-11-18 22:04  net技术的爱好者  阅读(66)  评论(0编辑  收藏  举报