zoukankan      html  css  js  c++  java
  • 事务隔离

    事务特性:ACID
    Atomicity 原子性
    Consistency 一致性
    Isolation 隔离性
    Durablity 持久性

    脏读dirty-read:针对update,事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。
    不可重复读unrepeatable read:针对update,事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录,那么在事务2提交前后事务1读取数据不一致
    幻读phantom read:针对插入删除记录,事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录,在同一事务里读的数据记录增加/减少,会有混乱而无法处理;

    不可重复读与幻读主要区分依据是另一事务是进行update还是增删操作

    事务的隔离机制:级别越高越安全,效率越低,主要是根据事务的提交时间,对线程的加锁范围程度来区分
    1.read-uncommitted
    其它线程会读到未提交数据,如果另一个线程回滚,这个线程数据就读错了,会有dirty-read, non-repeatable read , phantom-read
    2.read-committed(一般设定)
    一个线程提交数据其它线程才能读,避免脏读,但是会有non-repeatable read (事务1读取中有另一事务刷新数据并提交造成事务1读取混乱), phantom-read(事务1读取中有另一事务增删数据并提交造成事务1读取混乱)
    4.repeatable-read
    给读的数据加锁,避免脏读,其它线程不能更新此条数据,不会有unrepeatable read,但是会有其他数据插入删除,就会有plantom read
    8.serializable
    不允许事务并发,不会出现以上问题

    一般情况不考虑phantom read,因为一般不会再插入删除前后读两次数据
    悲观锁,乐观锁问题是解决read-committed情况下的不可重复读问题
    悲观锁:在读数据时请数据库为读的数据加锁,提交前不许别人更新
    乐观锁:自己在记录上加一个字段作为标记@Version,看是不是更新了,其它事务在读取前后检查这个标记,如果出现不可重复读问题会报错

  • 相关阅读:
    linux网络编程之socket编程(三)
    linux网络编程之socket编程(二)
    字符串转成时间戳
    xls的读写
    统计词语频率保存到xls
    信息时代的学习(对于人类)
    编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头
    ThinkPHP中:RBAC权限控制的实习步骤
    getField()和select()方法的区别
    按钮美化,变化显示效果
  • 原文地址:https://www.cnblogs.com/atongmumu/p/6550973.html
Copyright © 2011-2022 走看看