zoukankan      html  css  js  c++  java
  • mysql事务

    1.事务简介

    1)mysql中只有innodb数据库引擎才支持事务
    2)事务保证了数据库的完整性,可以使批量的sql语句要么全部执行,要么全部不执行。

    2.事务的四大特性

    ACID:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

    原子性:

    一个事务中的所有操作要么全部完成要么全部不完成,不会结束在中间的某个环节,即:在事务中间执行出现错误所有全部回滚,就类似该操作从未执行过一样。

    一致性:

    事务操作前后,数据库的完整性没有被破坏,例如:你向我转钱,不能出现你扣了钱,而我还没有收到。
    隔离有四种级别:(1)读未提交;(2)读已提交;(3)可重复读;(4)串行化。

    隔离性:

    同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有干扰。例如:我再从一张银行卡中取钱,而在我取钱结束前,你不能往我卡里转钱

    持久性:

    事务结束后,对数据库的修改是永久的,即便系统故障了也不会丢失。

    3.事务并发问题

    1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
    2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
    3)幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

    隔离级别与之对应的情况(mysql默认的事务隔离级别为repeatable-read)

    隔离级别是否发生脏读是否不可重复读是否幻读
    读未提交(read-uncommitted)
    读已提交(read-committed)
    可重复度(repeatable-read)
    串行化(serializable)

    脏读、幻读、不可重复读事例
    需要开启与上表相对应的隔离级别
    a.脏读:

    执行顺序A事务B事务
    1 开启事务  
    2   开启事务
    3   查询到余额为200
    4 查询到余额为200  
    5   取款100,余额被更改为100
    6 查询账户余额为100  
    7   取款发生错误事务回滚,余额变为200
    8 查询余额为200  
    9 提交事务  
    说明 脏读即根据另一事务对数据的修改而变化  

    b.不可重复读

    执行顺序A事务B事务
    1 开启事务  
    2   开启事务
    3   查询到余额为200
    4 查询到余额为200  
    5   取款100,余额被更改为100
    6 查询账户余额为200  
    7   提交事务
    8 查询余额为100  
    9 提交事务  
    说明 不可重复读即可以读到另一事务提交后的数据  

    c.不可重复读

    执行顺序A事务B事务
    1 开启事务  
    2   开启事务
    3   查询数据条数为10条
    4 查询数据条数为10条  
    5   新增十条数据
    6   提交事务
    7 查询数据条数为20条  
    9 提交事务  
    说明 幻读,前后多次读取数据总量不一致  
  • 相关阅读:
    搜刮一些开源项目的APP
    iOS Crash文件的解析
    iOS中RGB颜色转换
    随笔杂记
    iOS字体
    方法总结
    经验点滴
    个人理解
    OC 知识点回顾
    IOS UI 笔记整理回顾
  • 原文地址:https://www.cnblogs.com/chunyun/p/11747351.html
Copyright © 2011-2022 走看看