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事务有以下特性:
- 原子性:事务中的所有操作要么全部完成,要么全部不完成。
- 一致性:事务执行前后数据完整性保持一致。
- 隔离性:事务内部操作与其他事务隔离。
- 持久性:事务一旦提交,其数据变更永久保存在数据库上。
需要注意的是,MySQL的事务默认是支持DDL语句的,但会隐式地提交当前事务,因此DDL语句最好不要出现在事务中。