zoukankan      html  css  js  c++  java
  • 数据库的隔离级别 小强斋

     

    数据库隔离级别

    http://wenku.baidu.com/view/924c6dea172ded630b1cb688.html

    数据库隔离级别数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现.在四种隔离级别中,Serializable的级别最高, ReadUncommited级别最低.大多数数据库的默认隔离级别为: Read Commited,Sql Server , Oracle.少数数据库默认的隔离级别为Repeatable Read, MySQL InnoDB存储引擎即使是最低的级别,也不会出现第一类丢失更新问题 .

     mysql中

    select @@tx_isolation可以查看隔离级别

    更改: set transaction isolation level read uncommitted;

    1. isolation_read_uncommitted: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。
    2. isolation_read_committed: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据
    3. isolation_repeatable_read: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)
    4. isolation_serializable 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读。     


    Read Uncommited :读未提交数据(会出现脏读,不可重复读,幻读 ,避免了第一类丢失更新)

    Read Commited   :读已提交的数据(会出现不可重复读,幻读)
    Repeatable Read :
    可重复读(会出现幻读)
    Serializable    :
    串行化 

    隔离级别

    是否存在脏读

    是否存在不可重复读

    是否存在幻读

    Read Uncommited

    Y

    Y

    Y

    Read Commited

    N

    Y

    Y

    Repeatable Read

    N

    N

    Y

    Serializable

    N

    N

    N

    丢失更新  
    当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。  

    :
    事务A和事务B同时修改某行的值,

    1.
    事务A将数值改为1并提交
    2.
    事务B将数值改为2并提交。
    这时数据的值为2,事务A所做的更新将会丢失。
    解决办法:对行加锁,只允许并发一个更新事务。

    脏读:一个事务读到另一个事务未提交的更新数据例:
    1.Mary
    的原工资为1000,财务人员将Mary的工资改为了8000(但未提交事务
    )       
    2.Mary
    读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!

    3.
    而财务发现操作有误,回滚了事务,Mary的工资又变为了1000,像这样,Mary记取的工资数8000是一个脏数据。

    不可重复读:在同一个事务中,多次读取同一数据,返回的结果有所不同.换句话说就是,后续读取可以读到另一个事务已提交的更新数据.相反"可重复读"在同一事务多次读取数据时,能够保证所读数据一样,也就是后续读取不能读到另一事务已提交的更新数据.:
    1.
    在事务1中,Mary读取了自己的工资为1000,操作并没有完成

    2.
    在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
    3.
    在事务1中,Mary再次读取自己的工资时,工资变为了
    2000
    解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

    幻读:一个事务读取到另一个事务已提交的insert数据.

    :第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时 (此时第一事务还未提交),第二个事务向表中插入一行新数据。这时第一个事务再去读取表时,发现表中还有没有修改的数据行,就好象发生了幻觉一样

  • 相关阅读:
    读书笔记——吴军《态度》
    JZYZOJ1237 教授的测试 dfs
    NOI1999 JZYZOJ1289 棋盘分割 dp 方差的数学结论
    [JZYZOJ 1288][洛谷 1005] NOIP2007 矩阵取数 dp 高精度
    POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
    POJ2157 Check the difficulty of problems 概率DP
    HDU3853 LOOPS 期望DP 简单
    Codeforces 148D. Bag of mice 概率dp
    POJ3071 Football 概率DP 简单
    HDU4405 Aeroplane chess 飞行棋 期望dp 简单
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429466.html
Copyright © 2011-2022 走看看