我需要在我的MySQL项目中使用一个事务。但我不确定是否必须使用mysql_query("SET AUTOCOMMIT=0");
我知道我有两个选择:
此外,我听说其中一项不需要使用AUTOCOMMIT = 0
请帮助我知道我必须实际使用AUTOCOMMIT = 0
,使用BEGIN
还是START TRANSACTION
?
谢谢。
答案 0 :(得分:12)
如the manual中所述:
默认情况下,MySQL在启用autocommit模式的情况下运行。这意味着只要执行更新(修改)表的语句,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
是会话变量,必须为每个会话设置。要为每个新连接禁用自动提交模式,请参阅autocommit
处的Section 5.1.3, “Server System Variables”系统变量的说明。BEGIN
和BEGIN WORK
作为START TRANSACTION
的别名来启动交易。START TRANSACTION
是标准的SQL语法,是推荐ad-hoc事务的推荐方法。