10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册摘录

15.7.2.2 autocommit、Commit和Rollback

InnoDB,所有用户活动都发生在事务中。如果自动提交模式下,每个SQL语句单独形成一个事务。默认情况下,MySQL为每个新连接启动会话自动提交启用,如果该语句未返回错误,则MySQL在每个SQL语句之后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。看到第15.21.4节,“InnoDB错误处理”

一个有自动提交Enabled可以通过显式启动多语句事务来执行多语句事务开始事务或者开始语句,并以a结尾犯罪或者回滚声明。看到第13.3.1节“开始交易,提交和回滚陈述”

如果自动提交模式在会话中被禁用SET autocommit = 0,会话始终有一个打开的事务。一个犯罪或者回滚声明结束了当前的事务,并开始新的事务。

如果有一个会话自动提交如果没有明确提交最终事务,MySQL将回滚该事务。

有些语句隐式地结束事务,就像您已经完成了犯罪在执行语句之前。有关详细信息,请参见章节13.3.3,“导致隐式提交的语句”

一个犯罪意味着在当前事务中所做的更改是永久的,并且对其他会话可见。一个回滚另一方面,声明取消当前事务所做的所有修改。两个都犯罪回滚释放所有InnoDB在当前事务期间设置的锁。

用事务对DML操作分组

默认情况下,连接MySQL服务器开始于自动提交启用模式,当您执行它时,它会自动提交每个SQL语句。如果您有其他数据库系统的经验,这种操作模式可能是不熟悉的,其中它是发出序列的标准练习DML语句,并一起提交它们或回滚它们。

使用多个语句交易,使用SQL语句切换自动查询SET autocommit = 0并以犯罪或者回滚是合适的。若要保持自动提交,请使用开始事务并以犯罪或者回滚。下面的示例显示了两个事务。第一种是承诺;第二个被回滚。

壳> mysql测试
mysql> CREATE TABLE customer (a INT, b CHAR (20), INDEX (a));mysql>——在自动提交的情况下执行事务。mysql >开始交易;mysql> INSERT INTO customer VALUES (10, 'Heikki');查询OK, 1 row affected (0.00 sec) mysql> COMMIT;mysql>——执行另一个事务,关闭自动提交。mysql >设置自动提交= 0;mysql> INSERT INTO customer VALUES (15, 'John');mysql> INSERT INTO customer VALUES (20, 'Paul');mysql> DELETE FROM customer WHERE b = 'Heikki' Query OK, 1 row affected (0.00 sec) mysql> -- Now we undo those last 2 inserts and the delete. mysql> ROLLBACK; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM customer; +------+--------+ | a | b | +------+--------+ | 10 | Heikki | +------+--------+ 1 row in set (0.00 sec) mysql>
客户端语言中的事务

在PHP、Perl DBI、JDBC、ODBC等api中,或者MySQL的标准C调用接口中,可以发送事务控制语句,例如犯罪就像任何其他SQL语句一样,例如选择或者插入。一些api还提供单独的特殊事务提交和回滚函数或方法。