前言

概述

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,事务的开始,执行,和提交。

doem事务控制 事务控制语句_事务控制

eg2,事务的开始,执行,提交的同时使用 chain 打开一个新的事务,然后再执行,最后提交。

doem事务控制 事务控制语句_事务控制_02

eg3,start transaction 事务的开始,会造成一个隐含的 unlock tables,释放表的锁。

doem事务控制 事务控制语句_savepoint_03

一个事务中,尽可能不使用不同存储引擎的表,否则需要对非事务类型的表进行单独的处理。因为 commit,rollback 只针对事务类型的表进行回滚。

eg4,保存点使用(savepoint)

对于事务的控制,可以通过保存点 (savepoint) 指定事务回滚到哪个部分,对于复杂的应用,可以通过多个保存点配合完成事务回滚的位置。

如果你定义了两个名字相同的保存点,后来的定义会覆盖先前的定义,也就是说,只能回滚到最新定义的保存点位置。对于不需要的保存点,

通过 realse 删除保存点,删除保存点后就不能通过回滚到删除的这个保存点,因为删除,不存在了,所以回滚不到。

doem事务控制 事务控制语句_事务控制_04

特别注意:

保存点只针对事务手动提交有效,如果事务是自动提交的,保存点将随每一次的数据库操作而消失。

一旦事务提交,保存点将消失。