目录

  1. MySQL 事务概述
  2. 事务的ACID特性
  3. MySQL 事务的开始与提交
  4. MySQL 事务的回滚
  5. MySQL 自动提交模式
  6. 隔离级别与事务锁
  7. MySQL 事务的并发控制
  8. 参考资料

MySQL 事务概述

事务(Transaction)是一组数据库操作的集合,要求这些操作要么全部成功,要么全部失败。事务提供了对数据操作的原子性、隔离性、一致性和持久性(即 ACID 特性)。通过事务,可以确保数据的完整性和一致性,特别是在多个数据库操作需要一起执行时。

在 MySQL 中,事务主要用于涉及多个 SQL 操作的场景,以保证数据的一致性和正确性。


事务的ACID特性

MySQL 事务遵循 ACID 原则,确保数据在多个操作中始终保持一致性。

  • A (Atomicity):原子性。事务中的所有操作要么全部成功,要么全部失败,不能部分成功,保证了事务的“全有或全无”特性。
  • C (Consistency):一致性。事务的执行必须使数据库从一个一致性状态变到另一个一致性状态。
  • I (Isolation):隔离性。多个事务并发执行时,一个事务的操作不会影响到其他事务的执行。
  • D (Durability):持久性。事务一旦提交,对数据库的改变是永久性的,即使系统崩溃也能保证数据的持久化。

MySQL 事务的开始与提交

开始事务

在 MySQL 中,可以使用 START TRANSACTIONBEGIN 来显式地开始一个事务。事务的开始标志着数据库状态的开始。事务开始后,所有的操作都将被包含在事务中,直到提交或回滚。

示例:开始一个事务

START TRANSACTION;

BEGIN;

提交事务

提交事务使用 COMMIT 语句。COMMIT 会将事务中的所有操作永久保存到数据库中,并使事务结束。

示例:提交事务

COMMIT;

提交后,所有在事务中的修改都将永久保存到数据库。


MySQL 事务的回滚

如果在事务过程中发生错误,可以使用 ROLLBACK 来撤销事务中的所有操作,使数据库回到事务开始时的状态。回滚操作撤销了事务中的所有更改。

示例:回滚事务

ROLLBACK;

ROLLBACK 会撤销事务内的所有修改,确保数据的一致性。


MySQL 自动提交模式

默认情况下,MySQL 使用自动提交模式,即每一条 INSERTUPDATEDELETE 等操作都会自动提交。也就是说,每执行一次语句,MySQL 都会自动为其提交事务。

关闭自动提交模式

如果希望显式地控制事务,可以通过关闭自动提交模式来手动管理事务。使用 SET autocommit = 0; 来关闭自动提交模式。

示例:关闭自动提交

SET autocommit = 0;

此时,必须显式使用 COMMIT 提交事务,否则数据库操作将不会持久化。

开启自动提交模式

如果希望恢复自动提交模式,可以通过 SET autocommit = 1; 来开启。

示例:开启自动提交

SET autocommit = 1;

在开启自动提交模式下,每次执行 SQL 操作都会立即提交。


隔离级别与事务锁

MySQL 支持事务的 隔离级别,以确保事务之间的数据操作不会互相干扰。事务的隔离性由不同的隔离级别来定义,MySQL 支持四种标准的隔离级别:

  1. READ UNCOMMITTED:最低的隔离级别,一个事务可以读取其他事务未提交的数据(脏读)。这种隔离级别容易导致数据的不一致。
  2. READ COMMITTED:事务只能读取其他事务已提交的数据(避免脏读)。但是,可能会出现不可重复读的问题。
  3. REPEATABLE READ:默认的隔离级别,事务可以多次读取同一数据,保证在事务开始后到提交前的数据一致性(防止脏读和不可重复读)。但可能会出现幻读。
  4. SERIALIZABLE:最高的隔离级别,事务之间完全隔离,每次只能一个事务访问数据,避免脏读、不可重复读和幻读,但性能较低。

设置隔离级别

可以使用 SET TRANSACTION ISOLATION LEVEL 来设置事务的隔离级别:

示例:设置隔离级别为 REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

事务锁

在 MySQL 中,事务通过 来控制并发访问。当一个事务对数据进行修改时,会对该数据加锁,确保其他事务不能修改相同的数据。MySQL 提供了多种锁机制:

  • 行级锁:在 InnoDB 存储引擎中,支持行级锁,即只锁定正在修改的行,允许其他事务访问其他行。
  • 表级锁:当对表加锁时,其他事务不能访问该表的数据。

MySQL 事务的并发控制

并发控制是事务管理的核心内容之一,确保多个事务在并发执行时仍能保证数据的一致性。MySQL 提供了以下机制来控制并发:

  1. 锁的使用:通过行级锁或表级锁来确保事务对数据的独占访问。
  2. 死锁:当两个或更多事务形成循环等待,导致无法继续执行时,就会发生死锁。MySQL 会自动检测并处理死锁,通常会回滚其中一个事务。

参考资料


如果你有关于 MySQL 事务的进一步问题或需要更多的示例,随时告诉我!