我需要在MySQL上的项目中使用事务。但我不确定我是否必须使用mysql_query("SET AUTOCOMMIT=0");
。
我知道我有 2 个选择:
- 开始
- 开始交易
我也听说这两个项目之一不需要使用AUTOCOMMIT = 0
。
请帮助我知道我何时必须实际使用AUTOCOMMIT = 0
,BEGIN
还是START TRANSACTION
?
谢谢。
如手册中所述:
默认情况下,MySQL 在启用自动提交模式的情况下运行。这意味着一旦您执行更新(修改)表的语句,MySQL就会将更新存储在磁盘上以使其永久化。更改无法回滚。
要为单个语句系列隐式禁用自动提交模式,请使用
START TRANSACTION
语句:START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;
使用
START TRANSACTION
时,自动提交将保持禁用状态,直到您使用COMMIT
或ROLLBACK
结束事务。然后,自动提交模式将恢复到其以前的状态。
手册接着说:
若要显式禁用自动提交模式,请使用以下语句:
SET autocommit=0;
通过将
autocommit
变量设置为零来禁用自动提交模式后,对事务安全表(例如InnoDB
或NDBCLUSTER
表)的更改不会立即永久化。必须使用COMMIT
将更改存储到磁盘,或者使用ROLLBACK
忽略更改。
autocommit
是一个会话变量,必须为每个会话设置。要为每个新连接禁用自动提交模式,请参见第 5.1.3 节 "服务器系统变量"中对autocommit
系统变量的说明。支持将
BEGIN
和BEGIN WORK
作为用于启动事务的START TRANSACTION
的别名。START TRANSACTION
是标准 SQL 语法,是启动即席事务的推荐方法。
Start Transaction 和 SET AUTOCOMMIT=0 之间有很小的区别。如果在会话开始时出现 START TRANSACTION 并且在回滚后自动提交设置为 1(Mysql 以启用自动提交开始),则自动提交再次静默设置为 1如果我输入 SET AUTOCOMMIT=0,而不是 START TRANSACTION,显然回滚让自动提交禁用