一、基本概念
- 事务是数据库区别于文件系统的重要特性之一 , 当有了事务 , 就可以让数据库始终保持
一致性
, 同时可以通过事务的机制恢复到某个时间点
, 保证了提交到数据库的修改不会因为系统崩溃而丢失;
- 事务只是一个改变 , 是一些操作的集合 , 用专业术语说 , 就是一组
逻辑操作单元
。事务本身不具备四个特性 , 而是通过某些手段尽可能让执行单元
满足四个特性 , 那么此时称之为一个完整的事务 。
经常在网络上、现实中一提到事务就绑死ACID四个特性 , 但实际ACID不仅在事务中有体现 , 还可以涵盖各个领域 。二、事务处理的原则所有的事务都是作为
一组逻辑操作单元
来执行 , 即使出现故障 , 都不能改变这种方式 。当在一个事务中执行多个操作时 , 要么事务提交(commit) , 所有修改都会永久
地保存下来;要么事务回滚(rollback) , 所有修改都放弃 , 一切回归最初状态 。常见例子:
A给B转账 , A余额减少 , B余额增加 , 这是一套必须同时完成的操作 , 如果其中一个失败了 , 则所有操作都会失败 。
在SQL中体现为:
UPDATE account SET money = money - 100 WHERE name = 'A';UPDATE account SET money = money + 100 WHERE name = 'B';这两句SQL语句就必须同时完成 , 或同时失败 。
三、ACID
- 原子性(atomicity):指事务是不可分割的工作单位 , 要么全部提交 , 要么全部回滚 。
原子就是物理世界中最小的单位了 , 无法在继续分下去了 , 表达的是一个整体性的概念 。
- 一致性(consistency):在事务执行前后 , 数据从一个
合法性状态
转换到另一个合法性状态
, 这种状态是语义上
的 , 不同的业务场景 , 对于合法性状态
有不同的定义 。
可以理解为满足预定结果
的状态称为合法的状态 , 这种状态由自己定义 , 比如现实世界中的约束 。如果满足这种状态 , 那就是满足一致性 , 如果不满足 , 这操作失败 , 事务回滚 。
比如余额字段设置为无符号数值 , 即钱是不允许负数的 , 如果此时SQL语句修改余额小于0 , 此时就不满足定义的语义 , 所以SQL会执行失败(显示出来就是报错) , 事务就会回滚 。
- 隔离性(isolation):
指事务的执行不能被其它事务
干扰 , 即一个事务内部的操作及使用的数据对并发
的其它事务都是隔离的、独立的 , 并发执行的各个事务之间不能互相干扰 。
比如事务A把余额从0改成100了 , 此时事务A还没有commit , 而事务B进来读取余额了 , 此时结果是0还是100?这个时候就引出
隔离级别
这个概念了 。
- 持久性(durability):
指事务一旦提交(commit) , 对数据的改变就是永久性的 , 之后的其它操作丢不会对其有任何影响 。经验总结扩展阅读
- 如何打开电脑的屏幕键盘
- 四个字成语和峡有关的
- 我的 Kafka 旅程 - Producer
- Windows esp-idf 安装
- 建议收藏 Java线程同步的四种方式详解
- 历史上武则天和狄仁杰的关系
- 下 MySQL数据库-数据表
- 2023年10月21日是补墙的黄道吉日吗 2023年10月21日补墙好吗
- 乔丹的招牌动作有哪些
- 包贝尔的电影有哪些