您的位置:首页 > 数据库 > MySQL

MySql(24)------mysql事务控制

2016-09-06 09:52 162 查看
一 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代表自动提交事务。

二 实例准备条件

建表:

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;

三 实例分析

接口

eg1,事务的开始,执行,和提交:



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



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



一个事务中,尽可能不使用不同存储引擎的表,否则需要对非事务类型的表

进行单独的处理。因为commit,rollback只针对事务类型的表进行回滚。

eg4,保存点使用(savepoint):

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

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

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



特别注意:

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

一旦事务提交,保存点将消失。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: