1.什么是事务
- 事务是由一条或多条SQL语句组成的逻辑执行单元, 可以比喻成一个容器, 里面放的就是一堆SQL语句, 这些语句要么全部执行成功, 要么一个都无法执行成功(原子性)
2.为什么使用事务
- 对数据进行一系列的操作的时候, 为了防止这些操作中部分操作成功而另一些操作失败, 从而造成数据的不正确性, 这个时候我们就需要使用事务将其回滚到原来的状态
3.如何使用事务
- 关键字
由上面关键字可以看出, 一个事务的开始对应一个回滚或者提交, 之后就需要重新开启事务
- 银行余额示例



- pymysql 实现事务处理实例


1.原子性(Atomicity)
- 事务是一段程序的最小执行单元, 不可再分(就如同自然界的原子不可再分), 所以事务中的操作要么都成功, 要么都失败
2.一致性(Consistency)
- 事务的执行, 必须使数据库从一个一致性状态, 变成另一个一致性状态, 一致性是通过原子性来保证的
3.隔离性(Isolation)
- 各个事务的执行互不干扰, 任意一个事务的内部操作对其他并发的事务, 都是隔离的; 也就是说 : 并发执行的事务之间不能看到对方的中间状态, 并发执行的事务之间不能相互影响
4.持续性(Durability)
- 也叫"持久性", 指事务一旦提交, 对数据的任何改变都记录到永久存储器中, 通常是物理数据库
隐式可以比喻成自动
显式可以比喻成手动
1.自动提交事务 (隐式开启,隐式提交)
每条单独的SQL语句都是一个事务, 语句执行完之后会自动执行 commit 操作, 如果出现错误则进行事务回滚至之前的状态
- mysql 默认开启自动提交事务, 可通过下面语句来开启或关闭自动提交事务模式
- SQL server 默认开启自动提交事务, 通过下面语句来关闭或开启
- Oracle 默认显示提交事务, 通过下面语句开启或关闭自动提交事务模式
2.显式事务 (显式开启,显式提交)
通过指定事务开始语句来显示的开启事务, 并由提交或者回滚命令来结束事务
- mysql 以 或者 语句开始事务, 以 或者 语句结束事务
3.隐式事务 (隐式开启,显示提交)
在隐式事务中, 不需要使用 或者 来开启事务, 每个 SQL 语句第一次执行会自动开启事务, 但需要使用 提交或者 回滚来结束事务
- mysql 中通过关闭自动提交事务, 从而来达到隐式开启事务, 显示提交事务的目的
4.总结
MySQL 默认为每条 SQL 语句开启事务, 并且会在本条 SQL 执行完毕后自动执行 commit 操作进行提交, 设置手动提交的两种方式:
- 直接设置 Mysql 的提交模式
- 手动开启事务
1.什么是事务的保存点
- savepoint 类似于虚拟机中的快照, 运用于事务中
- 每设置一个 savepoint 就是一个保存点
- 当事务结束时会自动删除定义的所有保存点
- 在事务没有结束之前可以回退到任意保存点
2.设置和回滚保存点语法
3.事务保存点实验
- 设置保存点, 可以设置很多个(one、two、three)


- 回退到某个保存点, 可以跨越多个保存点

- 保存点 two 之后创建的保存点 three 也失效了

- rollback 回滚所有

- 保持事务短小
- 尽量避免事务中的 rollback
- 尽量避免 savepoint
- 显式声明打开事务
- 默认情况下,依赖于悲观锁,为吞吐量要求苛刻的事务考虑乐观锁
- 锁的行越少越好,锁的时间越短越好
—end—
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10429.html