MySQL 事务

1.事务

  • 事务四大特性:
    1. 原子性:要么所有操作都做,要么所有操作都不做。
    2. 一致性:数据要满足业务规则约束。
    3. 隔离性:(也称并发控制,可串行化,锁)2个事务相互隔离,在事务提交之前对其他事务不可见。
    4. 持久性:事务提交之后对数据的修改就是永久的。

2.开启事务

  • begin 或者 start transaction 或者 set autocommit = 0

3.提交事务

  • commit 
  • 隐式提交 DDL操作或者 在输入一个begin或者start transaction 开启下一个事务

4.回滚事务

  • rollback  隐式回滚 退出会话,连接超时,关机,出现故障。

5.事务隔离级别

  • MySQL InnoDB存储引擎有标准的四种隔离级别。
  1. 未提交读 read  uncommitted(RU): 即脏读,一个事务中读到了起其他事务修改过未提交的数据。
  2. 读已提交 read committed (RC): 是Oracle默认事务隔离级别。
    1. 也叫不可重读:读取到了其他事务对旧数据的修改。
    2. 幻读:读到了其他事务新增的数据,仿佛出现了幻影。
  3. 可重复读 repetable read(RR): 在一个事务中可以反复读取到事务开始时的数据不会发生变化。MySQL默认事务隔离级别。
  4. 串行 serializable  : 在每个读取的数据行上都加 表级共享锁,在每次写数据时都加 表级排它锁。造成InnoDB并发能力下降。

6.事务的实现

  1. 事务隔离性由锁来实现(查看博客
  2. 原子性,持久性通过redo log来实现
  3. 一致性由undo log来实现。

7.事务类型

  1. 扁平事务:也就是最常见的事务
  2. 带有保存点的扁平事务:允许回滚到事务中的某一个点,扁平事务隐式的设置了一个保存点就是事务开始时刻。
    • 设置保存点: SAVE WORK : 1
      回滚到保存点: ROLLBACK WORK : 1
      完全回滚事务: ROLLBACK WORK

  3. 链事务
  4. 嵌套事务
  5. 分布式事务

8.长事务

知识点:

  1. truncate 是DDL语句操作,delete 是DML 语句操作,他们的共同特点就是清空表内数据。但是truncate在事务中不能回滚,delete可以回滚。这是因为truncate是删除表出现建表,而delete只是删除数据,一次 truncate 之后自增id从1开始,而delete不从1开始。
原文地址:https://www.cnblogs.com/mibloom/p/9135624.html