【基础】事务控制语句
前言
Github:https://github.com/yihonglei/road-of-arch/tree/master/thinking-in-mysql
概述
MySql 通过 SET AUTOCOMMIT,START TRANSACTION,COMMIT 和 ROLLBACK 等等语句对事务进行控制。
基础语法:
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO]RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO]RELEASE]
SET AUTOCOMMIT={0 | 1}
在 MySql 中,默认的事务是自动提交的,如果想要事务不自动提交,需要明确的做事务控制。关于语法的分析:
1)START TRANSACTION 或 BEGIN 开始一项事务。
2)COMMIT 提交事务,ROLLBACK 回滚事务。
3)CHAIN 和 RELEASE 用于定义在事务提交或回滚后的操作,CHAIN 会开始一个新的事务,与刚才的事务完全处于隔离,
而 RELEASE 则表示事物提交或回滚后断开与客户端的连接。
4)SET AUTOCOMMIT 修改当前连接的方式,0 代表需要手动提交事务,需要使用明确的命令提交事务,1代表自动提交事务。
一 实例分析
1、准备条件
CREATE TABLE `t_user_main` (
`f_userId` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id,作为主键',
`f_userName` varchar(100) DEFAULT NULL,
`f_age` int(3) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`f_userId`),
KEY `userName_index` (`f_userName`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2、实例分析
eg1,事务的开始,执行,和提交。
eg2,事务的开始,执行,提交的同时使用 chain 打开一个新的事务,然后再执行,最后提交。
eg3,start transaction 事务的开始,会造成一个隐含的 unlock tables,释放表的锁。
一个事务中,尽可能不使用不同存储引擎的表,否则需要对非事务类型的表进行单独的处理。因为 commit,rollback 只针对事务类型的表进行回滚。
eg4,保存点使用(savepoint)
对于事务的控制,可以通过保存点 (savepoint) 指定事务回滚到哪个部分,对于复杂的应用,可以通过多个保存点配合完成事务回滚的位置。
如果你定义了两个名字相同的保存点,后来的定义会覆盖先前的定义,也就是说,只能回滚到最新定义的保存点位置。对于不需要的保存点,
通过 realse 删除保存点,删除保存点后就不能通过回滚到删除的这个保存点,因为删除,不存在了,所以回滚不到。
特别注意:
保存点只针对事务手动提交有效,如果事务是自动提交的,保存点将随每一次的数据库操作而消失。
一旦事务提交,保存点将消失。
还没有评论,来说两句吧...