如何使用MySQL中的多语句事务?

MySQL支持多语句事务,允许在一个事务中执行多条语句。

事务的基本语法为:

sql
START TRANSACTION;    # 开始事务
# 执行一组相关的SQL语句
COMMIT;              # 提交事务 
ROLLBACK;            # 回滚事务

例如:

sql
START TRANSACTION;

UPDATE products SET quantity = quantity - 1 WHERE id = 1;
UPDATE products SET quantity = quantity + 1 WHERE id = 2;

COMMIT;   # 提交事务,上述两个更新语句都生效

这是一个简单的事务,包含两条更新语句,要么都成功执行要么都失败回滚。
在事务中,任意语句失败都会触发回滚,回滚到事务开始前的状态。

保存点可以在事务中设置,用于部分回滚:

sql
START TRANSACTION;  

# ...

SAVEPOINT savepoint1;   

# ...

ROLLBACK TO SAVEPOINT savepoint1; # 回滚到savepoint1

# ...

COMMIT;   # 提交事务

MySQL事务有以下特性:

  1. 原子性:事务中的所有操作要么全部完成,要么全部不完成。
  2. 一致性:事务执行前后数据完整性保持一致。
  3. 隔离性:事务内部操作与其他事务隔离。
  4. 持久性:事务一旦提交,其数据变更永久保存在数据库上。

需要注意的是,MySQL的事务默认是支持DDL语句的,但会隐式地提交当前事务,因此DDL语句最好不要出现在事务中。