事务(Transaction)简述

本文介绍了事务的基本概念,包括其原子性、一致性、隔离性和持久性的特点,并详细阐述了并发控制中的脏读、不可重复读和幻读问题。接着,讨论了四种事务隔离级别:读未提交、读已提交、可重复读和序列化,以及它们在并发控制中的作用和可能产生的问题。此外,还提及了不同隔离级别下的锁行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、事务概述

1.简述

  • 事务(Transaction)是由一系列对系统中数据进⾏访问与更新的操作所组成的⼀个程序执行逻辑单元。

2.语法

  • 开始事务
mysql>begin;
mysql>start transaction;
  • 提交事务
mysql>commit;
  • 撤销事务(回滚)
mysql>rollback;;

3.特性(ACID)

  • 原⼦性(Atomicity)
    事务是一个原子的操作序列单元;执行一个事务时,此事务中的所有操作不是全部执行成功,就是全部执行失败。
  • ⼀致性(Consistency)
    事务执行后,数据库数据会对应事务的操作进行修改,保证数据库一致性状态。
  • 隔离性(Isolation)
    并发环境中,并发的事务是互相隔离的;不同事务并发操作相同数据时,每个事务都有各自完整的数据空间。
  • 持久性(Duration)
    事务提交后,事务修改的数据会永久保存到数据库中;即便服务器崩溃、宕机,只要重启数据库就能恢复到事务成功结束后的状态。

二、并发问题

1.脏读

  • 读到了没有提交的数据。
    by tyler

2.不可重复读

  • 同一条命令,返回不同结果集。
    by tyler

3.幻读

  • 重复查询时,数据发⽣了量的变化(insert,delete)。
  • 指同样的事务操作,在前后两个时间段内执行对同一个数据项的读取,可能出现不一致的结果。

三、隔离级别

1.简述

事务隔离级别脏读不可重复读幻读
读未提交(READ_UNCOMMITTED)允许允许允许
读已提交(READ_COMMITTED)禁止允许允许
可重复读(REPEATABLE_READ)禁止禁止可能出现
顺序读(SERIALIZABLE)禁止禁止禁止
  • 四种隔离级别越往下,级别越高、安全性越强、并发性越差。
  • 查询当前会话中的事务隔离级别
mysql>select @@tx_isolation;    #mysql8之前
mysql>select @@transaction_isolation;    #mysql8以后
  • 设置当前会话中的事务隔离级别
mysql>set session transaction isolation level REPEATABLE READ;    #level后跟级别名称

2.读未提交(READ_UNCOMMITTED)

  • 隔离级别最低,允许脏读。
  • 脏读:如果一个事务正在处理某一数据,并对其进⾏了更新,但同时尚未完成事务,目前还没有提交事务;与此同时,允许另一个事务也能够访问该数据。

出现脏读示例:

时间事务A(存)事务B(取)
T1开始事务——
T2——开始事务
T3——查询余额(1000元)
T4——取出1000元(余额0元)
T5查询余额(0元)——
T6——撤销事务(余额恢复1000元)
T7存入500元(余额500元)——
T8提交事务——

3.读已提交(READ_COMMITTED)

  • 不同的事务执行的时候只能获取到已经提交的数据。
  • 避免了脏读,但是会出现不可重复的问题。

出现不可重复读示例:

时间事务A(存)事务B(取)
T1开始事务——
T2——开始事务
T3——查询余额(1000元)
T4查询余额(1000元)——
T5——取出1000元(余额0元)
T6——提交事务
T7查询余额(0元)——
T8提交事务——

4.可重复读(REPEATABLE_READ)

  • 保证在事务处理过程中,多次读取同一个数据时,该数据的值和事务开始时刻是一致的。
  • 限制了不可重复读和脏读,但是有可能出现幻读的数据。

出现幻读示例:

时间事务A事务B
T1开始事务——
T2查询当前所有数据开始事务
T3——插入一条数据
T4查询当前所有数据提交事务
T5进行范围修改——
T6查询当前所有数据——
T7提交事务——

5.顺序读(SERIALIZABLE)

  • 是最严格的事务隔离级别,它要求所有事务排队执行,事务不可并发。

6.各隔离级别的锁的情况

  1. 读未提交(RU):有行级的锁,没有间隙锁。它与RC的区别是能够查询到未提交的数据。
  2. 读已提交(RC):有行级的锁,没有间隙锁,读不到没有提交的数据。
  3. 可重复读(RR):有行级的锁,也有间隙锁,每次读取的数据都是一样的,并且无幻读情况。
  4. 序列化(S):有行级锁,也有间隙锁,读表的时候,就已经上锁了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值