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

    Transaction Isolation Levels

    InnoDB支持SQL1992标准中的四种隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。默认的隔离级别是REPEATABLE READ。

    通过SET TRANSACTION命令可以改变默认的隔离级别,为了让这种改变对所有用户的所有连接都生效,需要加上--transaction-isolation选项。

    InnoDB通过不同的加锁策略来实现不同的隔离级别

    REPEATABLE READ

    这是InnoDB默认的隔离级别。在一个事务中,一致读会读到该事务中第一次读到的那个快照。这就意味着,在同一个事务中多次执行普通的SELECT语句返回的结果是一致的。

    对于加锁读(SELECT ... FOR UPDATE或者SELECT ... LOCK IN SHARE MODE)、更新、删除语句,锁取决于语句是否使用了唯一索引或者范围类的检索条件。

    • 对于用唯一索引作为检索条件,InnoDB只会锁发现的索引记录,而不会锁它前面的间隙
    • 对于其它的检索条件,InnoDB锁定扫描的索引范围,用间隙锁或者next-key锁来阻塞其它会话向这个范围内的间隙中插入数据

     

    参考 https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html


     事务的特性

    • 原子性:事务中的操作要么全部成功,要么全部失败
    • 一致性:事务操作必须是将数据库从一个一致性状态带到另一个一致性状态。所谓一致指的是,比如转账,A和B都有100元,转账之前总共是200元,转账之后必须也是200元
    • 隔离性:事务之间不会相互影响
    • 持久性:事务提交以后对数据库所做的改变将永久保存下来

    事务并发带来的问题

    • 脏读:一个事务读到另一个事务未提交的数据
    • 幻读:一个事务读到另一个事务已提交的数据,然而这种提交的数据涉及到整个表,比如插入和删除,看起来好像幻觉一样
    • 不可重复读:一个事务中多次读取同一个数据返回的结果不一样

    事务隔离级别

    • 读未提交:允许一个事务看到另一个事务没有提交的数据
    • 读已提交:允许一个事务看到另一个事务已提交的数据
    • 可重复读:同一个事务中多次读取看到的数据始终一致
    • 串行化:并发事务串行执行
  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/cjsblog/p/8261126.html
Copyright © 2011-2022 走看看