• 事务锁与脏读、不可重复读、幻读


    脏读

    (两个事务,同时操作对方尚未提交的数据)

    脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

    例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。

    解决办法:把数据库的事务隔离级别调整到READ_COMMITTED

    不可重复读:

    (事务1内的第一次读取与第二次读取不同,在事务1两次读取的过程中,存在其他事务更改了数据)

    不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。

    例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。 解决办法:把数据库的事务隔离级别调整到REPEATABLE_READ

    幻读:

    (事务1内的第一次读取与第二次读取不同,第二次读取时出现了新数据,)

    例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入(注意时插入或者删除,不是修改))了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。

    解决办法:把数据库的事务隔离级别调整到SERIALIZABLE_READ

    本质:

    几个隔离级别的本质为:事务之间的锁控制机制不同

    可重复读的实现机制:乐观锁,当有事务对数据修改时,会对数据版本+1,原来的事务使用老版本查询,查到的仍是老数据

    串行化的实现机制:事务读写锁

    默认级别

    oracle、sqlserver 默认级别为:读已提交

    mysql 默认级别为:可重复读

    参考:

    https://www.cnblogs.com/xiaohanlin/p/8644749.html

    https://blog.csdn.net/hemeinvyiqiluoben/article/details/80928070

  • 相关阅读:
    MySQL 卸载
    Mysql(压缩包)下载与安装
    sqlserver一次性修改多条
    mysql一些操作
    SQL函数集合
    js时间转换相关
    easyui grid中翻页多选方法
    easyui combobox筛选(拼音)
    wpf图片切换,幻灯效果
    openfire搭建IM
  • 原文地址:https://www.cnblogs.com/olmlo/p/12063887.html
Copyright © 2020-2023  润新知