mysql事物控制
作者:binmysql通过 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 | +----+-------+----------+