三、MySQL事务

本文详细阐述了事务的定义、四大原则,以及并发事务可能引发的问题,特别是不可重复读和幻读的区别。介绍了MySQLInnoDB存储引擎的默认隔离级别及其设置方法。最后讲解了如何在MySQL中手动管理事务的使用。
摘要由CSDN通过智能技术生成

1.事务的定义

事务其实就是一组sql语句。而执行这组sql语句时,要么都执行成功,要么都执行失败

2.事务的原则

  1. 原子性:事务时一个整体,其中的sql语句要么都执行成功,要么都执行失败
  2. 一致性:事务执行后应该保持最终数据的值是一致的
  3. 隔离性:多个用户同时操作互不受影响
  4. 持久性:事务执行成功后就持久化到数据库

3.事务的隔离级别

3.1.并发事务带来的问题

  • 脏读(Dirty read):用户A使用事务操作数据库时,事务中的sql语句修改了数据库中的内容,但此时事务并没有执行完毕即事务还未提交。用户B在此刻使用该数据库时就能看到用户A还未提交的数据。
  • 丢失修改(Lost to modify):事务A在读取一个数据时,事务B也在访问该数据,那么在事务A修改了该数据后,事务B也修改了该数据。这样事务A的数据结果就丢失了。
  • 不可重复读(Unrepeatableread):事务A中需要多次读取某数据,而在事务A执行的过程中,事务B也在执行,并将该数据修改了。事务A第一次读取到的是没被修改的值,第二次读取到的是被事务B修改了的值,导致事务A两次读取同一数据的值不同。
  • 幻读(Phantom read):幻读与不可重复读类似,在事务A在第一次查询数据后,并发事务B又插入了几条数据,事务A后续的查询中,发现查询处的数据与前面查询出的数据不一致

3.2.不可重复读和幻读的区别

不可重复读重点是修改(数据内如的变化),幻读的重点是插入或删除(数据量的变化)。

3.3.事务的隔离级别

  • 读取未提交(read-uncommited):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
  • 读取已提交(read-commited):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
  • 可重复读(repeatable-read):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • 串行化(serializable):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)。我们可以通过 SELECT@@tx_isolation;命令来查看

4.事务的使用

mysql是默认开启事务自动提交的

//关闭自动提交
set autocommit = 0;

//开启自动提交
set autocommit = 1;--默认
--手动提交事务
--1、关闭自动提交
set autocommit = 0;

--2、开启事务
start transaction;
--3、事务中的sql

sql语句

--如果成功,则全部提交
commit;

--如果失败,则全部回滚
rollback;

--事务结束
--4、sql语句结束后,直接开启自动提交即可
set autocommit = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值