1. 事务

事务:一条或者多条SQL语句组成一个执行单元,特点是要么同时成功要么同时失败,每条语句都相互依赖,形成一个整体,如果失败或者出现错误,那么状态会撤回到事务最初状态(回退)

  • 开启事务 start transaction; 开启事务后所有的操作都是虚拟化的
  • 回滚事务 rollback; 结束事务并回退
  • 提交事务 commit; 结束事务并提交

2. 提交方式

  • 自动提交 1 默认值
  • 手动添加 0
  • 查询事务提交方式 select @@autocommit;
  • 修改事务提交方式 set @@autocommit=0; 1为自动提交 0为手动添加

如果修改为手动提交 不开始事务 做增删改查 操作也需要commit操作才生效

3. 事务的四大特征(ACID)

  • 原子性(Atomicity)

    • 指事务包含的所有操作要么全部成功,要么全部失败回滚
      因此事务的操作成功则要应用到数据,操作失败则不能对数据库有影响
  • 一致性 (Consistency)

    • 一致性指事务必须使数据库从一个一致性变化到另外一个一致性
      也就是说一个事务执行之前和执行之后都必须处于一个一致性
  • 隔离性(isolcation)

    • 隔离性是当多个用户并发访问数据库时,如操作同一张表时,数据库为每个用户开启事务
      不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
  • 持久性(durability)

    • 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的
      即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

4. 事务的隔离性级别

08. 事务 - 图1

引发的问题

08. 事务 - 图2

  • 查询数据库隔离级别 select @@TX_ISOLATION;
  • 修改数据库隔离级别 set global transaction isolation level 级别; 修改后需要重新连接数据库

    • REPEATABLE READ 默认级别
  • 脏读 指的事务未被提交 另外一个事务已经可以查询到该事务的数据
  • 不可重复读 指两个事务开启 其中一个事务已经提交了 另外一个事务读取到该事务的数据 正常来说应该是读取不到的,需要结束事务后才能读取
  • 幻读 指查询某个数据不存在 但插入时无法无插入此数据,并且之后发现数据已经存在表中 或 某数据不存在 但执行删除操作 缺成功了

08. 事务 - 图3