mysql如何使用事务保证操作原子性

来源:这里教程网 时间:2026-02-28 20:11:54 作者:

在MySQL中,事务是保证数据库操作原子性的核心机制。通过事务,可以确保一组SQL操作要么全部成功执行,要么全部不执行,从而避免数据不一致的问题。

开启事务控制

MySQL默认每条SQL语句自动提交(autocommit = 1),要使用事务必须手动关闭自动提交或显式开始事务。

使用 START TRANSACTION 显式开始一个事务 也可以用 BEGINBEGIN WORK,效果相同 执行完成后,根据结果选择 COMMIT 提交或 ROLLBACK 回滚

示例:

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- 如果两条更新都成功
COMMIT;
-- 如果任一失败
-- ROLLBACK;

确保使用支持事务的存储引擎

不是所有MySQL存储引擎都支持事务。必须使用支持事务的引擎,如 InnoDB。

MyISAM 不支持事务,不能回滚 InnoDB 是默认且推荐的引擎,完整支持ACID特性 建表时确认使用 InnoDB:CREATE TABLE ... ENGINE=InnoDB;

正确处理异常并回滚

在应用程序中,需要捕获SQL执行过程中的错误,并触发回滚。

执行关键操作时监控返回结果或异常 一旦发现错误,立即执行 ROLLBACK 防止部分写入 在脚本或程序中设置事务边界,避免跨操作污染

例如在PHP中:

$pdo->beginTransaction();
try {
    $pdo->exec("UPDATE a SET val = val - 10");
    $pdo->exec("UPDATE b SET val = val + 10");
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollback();
}

合理设置隔离级别

事务隔离级别影响并发行为和数据一致性。可根据业务需求调整。

READ COMMITTED:避免读取未提交数据 REPEATABLE READ(InnoDB默认):防止不可重复读 通过 SET TRANSACTION ISOLATION LEVEL 调整

事务的基本原则是“全做或全不做”。只要在操作开始前开启事务,中间任意步骤出错就回滚,就能有效保障原子性。

基本上就这些。关键是开启事务、用对引擎、出错回滚。

相关推荐

热文推荐