在InnoDB
,所有用户活动发生在一个事务中。如果自动提交
启用模式,每个SQL语句形式一个事务。默认情况下,每个新连接MySQL开始会话自动提交
启用,所以MySQL并提交后如果每个SQL语句声明没有返回一个错误。如果语句返回一个错误,提交或回滚的行为取决于错误。看到部分15.21.5,“InnoDB错误处理”。
一个会话,自动提交
可以执行多个语句事务开始启用一个显式的开始事务
或开始
声明和结束它提交
或回滚
声明。看到13.3.1部分,“启动事务,提交和回滚语句”。
如果自动提交
在一个会话与模式是禁用的设置自动提交= 0
,会话事务总是打开。一个提交
或回滚
语句结束当前事务和一个新的开始。
如果一个会话自动提交
残疾人没有明确承诺结束最后的事务,MySQL回滚该事务。
一些语句含蓄地结束一个事务,如果你做了一个提交
在执行该语句。有关详细信息,请参见13.3.3部分,“导致一个隐式声明提交”。
一个提交
意味着在当前事务中所做的更改对其他会话都是永久的,成为可见。一个回滚
声明中,另一方面,取消所有的修改由当前事务。这两个提交
和回滚
释放所有InnoDB
在当前事务锁。
默认情况下,连接到MySQL服务器开始自动提交自动模式下启用,提交你的每个SQL语句执行它。这种模式的操作可能是不熟悉的如果你有经验与其他数据库系统,它是一系列标准的实践问题DML语句和提交或回滚。
使用多个语句交易,关闭自动提交SQL语句设置自动提交= 0
和结束每笔交易提交
或回滚
是合适的。离开自动提交,开始每个事务开始事务
和结束它提交
或回滚
。下面的例子显示了两个事务。第一个承诺;第二个是回滚。
壳> mysql测试
mysql >创建表customer (INT、CHAR(20),指数(a));查询好,0行影响(0.00秒)mysql >——开启自动提交事务。mysql >开始交易;查询好,影响(0.00秒)mysql > 0行插入客户价值(10 '海基');查询好了,1行影响(0.00秒)mysql >提交;查询好,0行影响(0.00秒)mysql >——另一个事务处理自动提交电话断了mysql >设置自动提交= 0;查询好,影响(0.00秒)mysql > 0行插入客户价值(15,“约翰”);查询好了,1行影响(0.00秒)mysql >插入客户价值(20,“保罗”);查询好了,1行影响(0.00秒)mysql >删除从客户b =“海基”;查询好了,1行影响(0.00秒)mysql >——现在我们撤销最后2插入和删除。 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>
交易客户端语言
在api如PHP、Perl DBI, JDBC、ODBC,或MySQL的标准C调用接口,你可以发送事务控制语句等提交
MySQL服务器作为字符串就像任何其他SQL语句等选择
或插入
。一些api还提供单独的特殊事务提交和回滚的函数或方法。