此篇文章是对MySql中的事务处理的一个小总结
目录
一、 何为事务
- 事务:也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。
- 事务的回滚:如果事务中的任何一个sql执行失败,ROLLBACK可以进行事务的回滚,将数据恢复到事务执行之前的状态,保证数据的一致性。
- 前提:mysql存储引擎InnoDB
过事务的使用,能防止数据库中出现数据不一致现象。 如两个银行账户进行转账,涉及到两条更新操作,这两条更新操作只允许全部成功或失败,否则数据会出现不一致的现象。
二、事务的特征:ACID
事务特征可用四个字母的缩写表示:即ACID
- 原子性 ATOMICITY
事务的sql语句不可分割,要么全部成功,要么全部失败 - 一致性 CONSISTENCY
不管事务执行成功还是失败,数据总是保持一致性的。 - 隔离性 ISOLATION
事务与事务之间是相互隔离的,不相互影响 - 持久性 DURABLITY
事务一旦提交成功,对于数据的改变是持久性的,不能再进行事务的回滚了。
三、事务的组成
数据库中,事务由一组相关的DML或SELECT语句,加上一 个TPL语句(COMMIT、ROLLBACK)或一个DDL语句(CREATE、 ALTER、DROP、TRUNCATE等)或一个DCL(GRANT、REVOKE) 语句。
四、事务处理语言——TPL (TRANSACTION PROCESS LANGUAGE )
- 事务处理语言:Transaction Process Language ,简称TPL, 主要用来对组成事务的DML语句的操作结果进行确认或取消。 确认也就是使DML操作生效,使用提交(COMMIT)命令实现; 取消也就是使DML操作失效,使用回滚(ROLLBACK)命令实现。
事务的自动提交模式
- mysql中的事务是自动提交的,即每一个sql语句后默认加COMMIT语句
- 查看mysql的事务自动提交模式:SHOW VARIABLES LIKE 'autocommit’
- 修改mysql的自动提交模式
SET AUTOCOMMIT=1 表示开启
SET AUTOCOMMIT=0 表示关闭
事务处理
- MySQL的事务处理主要有两种方法
-
用begin,rollback,commit来实现:
begin开始一个事务
rollback事务回滚
commit 事务提交 -
直接用set来改变MySQL的自动提交模式
MySQL默认是自动提交的,也就是你提交一个sql,就直接执行!可以通过set autocommit = 0 禁止自动提交set autocommit = 1 开启自动提交来实现事务的处理。
但要注意当用set autocommit = 0 的时候,以后所有的sql都将作为事务处理,直到用commit确认或 rollback结束,注意当结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!
-
事务处理隐式结束
- 隐式提交:当下列任意一种情况发生时,会发生隐式提交 •
- 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME) 语句;
- 执行一个DCL(GRANT、REVOKE)语句;
- 隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
- 客户端强行退出
- 客户端连接到服务器端异常中断
- 系统崩溃
设置保存点
如果在一个事务内,想要回滚到指 定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。
- SAVEPOINT savepointname;————定义一个保存点语句;
- ROLLBACK TO savepointname;——-——回滚到指定保存点
注意:如上两条语句不结束事务的执行。
看官,如果觉得这篇文章还不错,点个赞加个关注再走呗 ^ - ^
MySql系列文章: