事务
事务使用户定义的一个操作序列,这些操作要么全部失败,是一个不可分割的工作单位(构成单一逻辑工作单元的操作集合)
如果某一事务成功,则该事务中进行的所有数据更改均会提交,成为数据库中永久组成部分。
如果事务遇到错误且必须取消或者回滚,则所有更改均被清除。
事务的执行,要么成功,要么回滚。
逻辑架构和存储引擎
MySQL服务器逻辑架构从上往下可以分为三层:
第一层:处理客户端连接、授权认证等
第二层:服务器层,负责查询语句的解析、优化、缓存以及内置函数的实现、存储过程等。
第三层:存储引擎,负责MySQL中数据的存储和提取
MySQL中服务器不管理事务,事务是由存储引擎实现的。MySQL支持事务的存储引擎有InnoDB、NDB Cluster等,其中InnoDB使用最为广泛;其他存储引擎不支持事务。
事务操作
基本命令:
START TRANSACTION 或 BEGIN 开启一个事务
COMMIT 提交当前事务,将其永久保存下来。使其永久化。
ROLLBACK 回滚当前事务,取消其更改
SET autocommit 禁用或启用当前会话的自动默认提交模式(在MySQL中每个sql语句都会默认进行提交)
#开启一个事务
START TRANSACTION
[transaction_characteristic [, transaction_characteristic] …]
#事务特点
transaction_characteristic: { WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY }
BEGIN [WORK]
#提交
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
#回滚
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
#设置自动提交
SET autocommit = {0 | 1}
执行流程
关闭自动提交
MySQL中默认采用的是自动提交模式,在自动提交模式下,每个sql语句都会被当作一个事务执行提交操作。
查看自动提交状态:
SHOW VARIABLES LIKE 'autocommit';
关闭自动提交
主动关闭
#值为1为开启,0为关闭
SET autocommit=0;
如果没有关闭自动提交,在执行增删改后,ROLLBACK是不能撤销操作的。
而如果关闭了自动提交,你需要在做出更改之后,使用COMMIT或者ROLLBACK提交或者撤销操作。(注意:自动提交关闭对DDL语言没有作用,例如:CREATE ,DROP 等操作)
隐式的关闭
在开启一个事务之后,自动提交会暂时的关闭
#执行事务
START TRANSACTION;
……
COMMIT/ROLLBACK;
使用 START TRANSACTION ,自动提交将保持禁用状态,直到您使用 COMMIT 或结束事务ROLLBACK 。自动提交模式然后恢复到其先前的状态。
开启事务
#该语句标志着一个事务的开始
START TRANSACTION
启动事务后把所有后继的SQL语句看作事务组成的一部分,知道提交或者回滚事务为止。
语法:
START { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ] ]
提交事务
#提交事务
COMMIT TRANSACTION;
COMMIT ;
提交事务后,事务结束,期间所作的操作将保存在数据库中,事务结束。
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64788.shtml