首页 > mysql > mysql事物控制

mysql事物控制

作者:bin
目录
[隐藏]

mysql通过 set autocommit、start transaction 、commit、rollback、chain、等语支持本地事物;

默认情况下mysql时自动提交等autocommit,注意:使用start transaction 时会导致unlock tables;

一、开启事物控制

如果需要主动提交、回滚,那么需要使用命令:

(session_1)mysql> start transaction;   --启用事物控制

(session_1)mysql> insert into emp(ename, store_id) values('qi', 19); --插入一条数据

(session_1)mysql> select * from emp;

+----+----------+----------+
| id | ename | store_id |
+----+----------+----------+
| 1 | 曾彬 | 11 |
| 0 | qi | 19 |
+----+----------+----------+

此时(在commit前)在当前session,可以select到新插入等数据;而我们换一个session打开,然后查同样的表:

(session_2)mysql> select * from emp;

+----+----------+----------+
| id | ename | store_id |
+----+----------+----------+
| 1 | 曾彬 | 11 |
+----+----------+----------+

我们发现是查询不到的。

当时我们在session_1中使用commit进行提交后,session_2便可以查询到了

(session_1)mysql> commit;

如果我们使用commit and chain进行提交,那么会开启一个新的事物控制:

(session_1)mysql> commit and chain;

二、回滚事物

可以通过savepoint(保存点)进行回滚控制,如果相同名字的savepoint,那么后者会覆盖前者,也可以通过release savepoint去释放保存点,示例:

(session_1)mysql> start transaction; --启用事物

(session_1)mysql> insert into emp(id, ename, store_id) values(1, 'qi', 19); --插入数据

(session_1)mysql> savepoint test; --设置保存点

(session_1)mysql> select * from emp; --查看数据
 +----+-------+----------+
 | id | ename | store_id |
 +----+-------+----------+
 | 1 | qi | 19 |
 +----+-------+----------+

(session_1)mysql> insert into emp(id, ename, store_id) values(2, 'zhang', 20); --再插入一条数据

(session_1)mysql> select * from emp; --查看数据
 +----+-------+----------+
 | id | ename | store_id |
 +----+-------+----------+
 | 1 | qi | 19 |
 | 2 | zhang | 20 |
 +----+-------+----------+

(session_1)mysql> rollback to savepoint test; --回滚事物

(session_1)mysql> select * from emp; --查看数据
 +----+-------+----------+
 | id | ename | store_id |
 +----+-------+----------+
 | 1 | qi | 19 |
 +----+-------+----------+

可见,事物回滚后,savepoint后面提交的数据,将会被回滚,这里需要注意的是,在commit前,其它session,查询的内容都会是start transaction前的内容:

(session_1)mysql> commit; --session_1提交事物

(session_2)mysql> select * from emp; --session_2查询
 +----+-------+----------+
 | id | ename | store_id |
 +----+-------+----------+
 | 1 | qi | 19 |
 +----+-------+----------+

您必须 [ 登录 ] 才能发表留言!