Mysql_自动提交,提交和回滚

270 阅读3分钟

自动提交,提交和回滚

在中InnoDB,所有用户活动都发生在交易内部。如果autocommit启用了mode,则每个SQL语句将自己形成一个事务。默认情况下,MySQL为autocommit 启用的每个新连接启动会话,因此如果该SQL语句未返回错误,则MySQL在每个SQL语句之后进行提交。如果一条语句返回错误,则提交或回滚行为取决于该错误。请参见 “ InnoDB错误处理”

具有会话autocommit 启用可以通过显式启动它执行多语句事务 START TRANSACTIONBEGIN 语句,并用它结束 COMMITROLLBACK 声明。请参见“ START TRANSACTION,COMMIT和ROLLBACK语句”

如果autocommit在与SET autocommit = 0的会话中禁用了mode ,则该会话将始终打开一个事务。一个 COMMITROLLBACK 语句结束当前事务和一个新的开始。

如果autocommit禁用的会话在 没有显式提交最终事务的情况下结束,则MySQL将回滚该事务。

某些语句隐式结束事务,就好像您COMMIT在执行该语句之前已经完成了。有关详细信息,请参见“导致隐式提交的声明”

COMMIT意味着当前事务中所做的更改将变为永久性,并在其他会话中可见。一个 ROLLBACK 声明,而另一方面,取消当前事务中的所有修改。双方 COMMITROLLBACK 释放所有InnoDB当前事务期间设置的锁。

将DML操作与事务分组

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

要使用多语句 事务,请使用SQL语句关闭自动提交功能,SET autocommit = 0并使用COMMITROLLBACK根据需要结束每个事务 。要保留自动提交功能,请以开始每个交易,START TRANSACTION并以COMMIT或 结束 交易ROLLBACK。以下示例显示了两个事务。首先是承诺;第二个被回滚。

shell> mysql test
mysql> CREATE TABLE customer (a INT, b CHAR (20), INDEX (a));
Query OK, 0 rows affected (0.00 sec)
mysql> -- Do a transaction with autocommit turned on.
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO customer VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> -- Do another transaction with autocommit turned off.
mysql> SET autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO customer VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO customer VALUES (20, 'Paul');
Query OK, 1 row affected (0.00 sec)
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或MySQL的标准C调用接口之类的API中,您可以COMMIT像其他任何SQL语句(如SELECT或) 一样,将事务控制语句(如字符串)发送到MySQL服务器INSERT。一些API还提供了单独的特殊事务提交和回滚功能或方法。

更多内容欢迎关注我的个人公众号“韩哥有话说”,100G人工智能学习资料,大量后端学习资料等你来拿。

qrcode_for_gh_3214f9e3470a_258.jpg