使用BEGIN和START TRANSACTION时的MySQL AUTOCOMMIT状态

Moh*_*eri 6 mysql transactions autocommit

我需要在我的MySQL项目中使用一个事务.但我不确定我是否必须使用mysql_query("SET AUTOCOMMIT=0");.
我知道我有两个选择:

  1. 开始
  2. 开始交易

我也听说过这两个项目中的一个不需要使用AUTOCOMMIT = 0.
请帮我知道我什么时候必须使用AUTOCOMMIT = 0,有BEGIN或有START TRANSACTION

谢谢.

egg*_*yal 14

手册所述:

默认情况下,MySQL在启用自动提交模式的情况下运行.这意味着只要执行更新(修改)表的语句,MySQL就会将更新存储在磁盘上以使其永久化.无法回滚更改.

要为单个语句系列隐式禁用自动提交模式,请使用以下START TRANSACTION语句:

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

使用START TRANSACTION,自动提交保持禁用状态,直到您使用COMMIT或结束事务ROLLBACK.然后,自动提交模式将恢复为先前的状态.

手册继续说:

要显式禁用自动提交模式,请使用以下语句:

SET autocommit=0;
Run Code Online (Sandbox Code Playgroud)

通过将autocommit变量设置为零来禁用自动提交模式后,对事务安全表(例如InnoDBor或表)的更改NDBCLUSTER不会立即成为永久更改.您必须使用COMMIT将更改存储到磁盘或ROLLBACK忽略更改.

autocommit是一个会话变量,必须为每个会话设置.要禁用自动提交模式为每个新连接,看到的描述autocommit在系统变量5.1.3节,"服务器系统变量".

BEGINBEGIN WORK作为START TRANSACTION启动事务的别名支持.START TRANSACTION是标准的SQL语法,是启动临时事务的推荐方法.

  • @CMCDragonkai:所以你的问题的答案是“是的,使用`START TRANSACTION`或`BEGIN`时不需要禁用自动提交”。 (3认同)