MySQL 事务

控制事务的语句

默认情况下,MySQL 的 autocommit 设置为启用,也就是说所有语句产生的变动都会自动地提交到数据库中,无法回滚。

如何启用事务?

使用 START TRANSACTIONBEGIN 语句

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

将 autocommit 设置关闭

SET autocommit=0;
UPDATE test set a=1;

DDL 语句不能回滚

所有的数据定义语言(DDL) 语句是不可以回滚的。

隐式提交事务的语句

  • 数据定义语言(DDL) 语句。 例如:ALTER DATABASE, ALTER TABLE, CREATE INDEX, DROP INDEX 等。InnoDB 将 CREATE TABLE语句作为单个事务处理,这意味着来自用户的ROLLBACK不会撤销用户在该事务期间所做的 CREATE TABLE 语句。

  • 隐含地使用或者更改 mysql 中数据表的语句。 例如:ALTER USER, CREATE USER, REVOKE, SET PASSWORD

  • 事务控制及锁表语句。 例:BEGIN, LOCK TABLES, SET autocommit=1, START TRANSACTION, UNLOCK TABLES

  • 管理语句。 例: ANALYZE TABLE, CACHE INDEX, CHECK TABLE, FLUSH, LOAD INDEX INTO CACHE, OPTIMIZE TABLE, REPAIR TABLE, RESET

  • 副本控制语句。 例:START SLAVE, STOP SLAVE, RESET SLAVE, CHANGE MASTER TO

引用

  1. START TRANSACTION, COMMIT, and ROLLBACK Syntax
Alvie's Blog

Alvie's Blog

If you're going through hell, keep going

comments powered by Disqus
rss facebook twitter github youtube mail spotify instagram linkedin google pinterest medium