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

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

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

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

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

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

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

  • 相关阅读:
    win7下 iis配置 不能添加默认文档的 解决方案
    经典SQL语句大全
    Sql 行转列问题总结
    jQuery获取Select选择的Text和 Value(转)
    如何让虚拟目录里面的webconfig不继承网站的设置
    SQL2008 用户'sa'登录失败(错误18456)图文解决方法
    ASP.NET实现公历转农历的简单方法
    你的DNN站点慢了么?
    SQLServer2005删除log文件和清空日志的方案
    由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目 "xxx"
  • 原文地址:https://www.cnblogs.com/xl717/p/12146083.html
Copyright © 2011-2022 走看看