事务
来源:互联网 发布:python的shell运行 编辑:程序博客网 时间:2024/05/29 09:33
事务就是由若干条写语句组成的执行单元,单元的全部写语句要么全执行、要么都不执行。
在MySQL环境中,事务是由一个或多个SQL语句组成的独立的单元。这个单元中的每个SQL语句是互相依赖的,而且单元作为一个整体是不可分割的。
如果单元中的一个语句不能完成,整个单元就会回滚(撤销),所有影响到的数据将返回到事务开始以前的状态。
因而,只有事务中的所有语句都成功地执行才能说这个事务被成功地执行
事务只针对insert、update、delete语句生效(除了select语句)
如何使用事务
开启事务
start transaction;
提交(结束)事务
把事务中全部的写语句持久化到数据库
commit;
撤消(回滚)事务
把数据库的信息状态还原到事务开始之前
rollback;
start transaction作用:
防止写sql语句立即持久化到数据库(防止commit自动提交),会形成事务日志文件(写事务日志、撤销事务日志)系统里边有一个会话变量,可以防止自动commit提交
set autocommit=0; //禁止自动提交写sql语句到数据库
set autocommit=1; //开启自动提交
set autocommit=0 不完全等同于 start transaction,
set autocommit=0 设置完毕后,在当前的连接中始终禁止自动提交,后边可以执行多个commit或rollback
start transaction 就是临时禁止自动提交,当执行一个commit或rollback后,其就失去作用
提交动作:set autocommit=0 commit/set autocommit=1
回滚动作: set autocommit=0 rollback
部分撤销
根据业务要求,进行事务的部分撤销实现:
说明:在以上语句中,第一行语句开始了一个事务;第2、3行语句对数据进行了修改,但没有提交;第4行设置了一个保存点;第5行删除了数据,但没有提交;第6行将事务回滚到保存点S1,这时第5行所做修改被撤销了;第7行修改了数据;第8行结束了这个事务,这时第2、3、7行对数据库做的修改被持久化。
四个特性
事务4个特性:
术语“ACID”是一个简称,每个事务的处理必须满足ACID原则,
即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)
原子性
原子性意味着每个事务都必须被认为是一个不可分割的单元。原子的执行是一个或者全部发生或者什么也没有发生的命题
一致性
体现的是业务数据的一致性,从A账户扣除100元钱,则B账户必定需要增加100元钱。否则大家不增不少
隔离性
隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到
持久性
通过事务实现对数据库的操作最终会被永久记录在数据库mysql服务器里边,实现的机制是通过二进制日志文件
注意
- 在当前的连接中,没有commit提交的情况下,是可以看到变化后的数据的,但是其他连接看不到,只有commit之后,其他连接才可以看到变化后的数据
- 当执行rollback操作后,数据都还原到事务开始之前的状态
- 一组start transaction/commit[rollback]执行完毕后,再次执行的写语句(没有开启事务),立即执行立即持久化,没有反悔的余地
- set autocommit=0; 开启事务(禁止自动commit提交),并且可以多次使用commit/rollback,进行分批次的提交/回滚动作
set autocommit=1; 关闭事务(开启自动commit提交)
自动commit提交:每个写语句都立即持久化到数据库中 - 与事务有关的数据表的存储引擎要求是innodb的,innodb支持事务
MySQL使用的是平面事务模型,因此嵌套的事务是不允许的。
在第一个事务里使用START TRANSACTION命令后,当第二个事务开始时,自动地提交第一个事务。同样,下面的这些MySQL语句运行时都会隐式地执行一个COMMIT命令:
● DROP DATABASE / DROP TABLE
● CREATE INDEX / DROP INDEX
● ALTER TABLE / RENAME TABLE
● LOCK TABLES / UNLOCK TABLES
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- 事务
- Yslow性能指标
- Java容器_Map_HashMap源码分析
- Spring+hibernate集成
- 找出数组中第k大的数
- O(n)求回文串 manacher算法
- 事务
- AndFix 源码分析之二
- PyTorch(一)——数据处理
- 最简单的目标跟踪(模版匹配)
- windows 下bat循环根目录下所有文件路径并执行响应命令
- spatial adjustment工具失败(The coordinates or measures are out of bounds)
- 基于粒子滤波的物体跟踪
- COBOL DB2 CURSOR
- Lucene TopDocs类