zoukankan      html  css  js  c++  java
  • MySQL 事务性及特性ACID

    数据库事务

    事务逻辑上指一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。

    MySQL事务现在的默认存储引擎是InnoDB,事务隔离级别是重复读repeatable read。

    重复读 repeatable read:InnoDB的默认隔离级别。可以防止任何被查询的行被其他事务更改,从而阻止不可重复的读取。它使用中度严格的锁定策略,以便事务内的所有查询都会查看同一快照中的数据,即在事务开始时的数据。

    当创建查询事务时,事务一直没有进行更新,每次查询到的数据都是之前查询结果的快照。

    问题:数据库插入新数据后,查询不到???

    解决方案:

    1. 修改事务隔离级别。改为支持不可重复读的隔离级别。
    2. 每次查询后更新事务:#方法1,每次查询后进行commit操作,进行事务更新。#方法2,创建connect连接时,autocommit=True,自动进行commit提交。
    3. 关闭数据库的事务(修改存储引擎)。只有InnoDB存储引擎才支持事务。

    事务特性 ACID

    • 原子性 Atomicity:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要不都不发生。
    • 一致性 Consistency:事务前后数据的完整性要保持一致。在事务执行之前数据库是符合数据完整性约束的。
    • 隔离性 Isolation:指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。
    • 持久性 Durability:指一个事务一旦被提交,它对数据库的改变就是永久性的。

    隔离性

    隔离级别 脏读 不可重复读 幻读
    读未提交 read uncommitted yes yes yes
    读已提交 read committed no yes yes
    可重复读 repeatable read no no yes
    可串行读 serializable no no no

    脏读:一个事务读取到了另一个事务未提交的数据。

    不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。

          一个事务读取到了另一个事务已经提交的数据-增删改操作。

    幻读:一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

    可重复读:确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。

    可串行化:在每个读的数据行上加上共享锁。

  • 相关阅读:
    JZOJ 2020.10.6 提高B组反思
    【NOIP2011模拟11.1】钓鱼
    JZOJ【NOIP2012模拟8.9】2020.10.5 T1
    ⑫linux基础命令 过滤 grep
    ⑪linux基础命令 tail
    ⑩linux基础命令 head
    ⑨linux基础命令 cat
    ⑧linux基础命令 rm
    ⑦linux基础命令 mv
    ⑥linux基础命令 cp
  • 原文地址:https://www.cnblogs.com/xl717/p/12146083.html
Copyright © 2011-2022 走看看