ACID

ACID

  • 原子性(A):一个事务的操作,要么全部完成,要么全部不完成
  • 数据库管理系统(DBMS),默认情况下一条sql一个单独事务,事务自动提交。
    • 显示使用start transaction开启事务,将sql放在事务中执行
    • 预写事务日志,将数据提交到实际数据页面前,先写在事务日志上
  • 一致性©:数据在事务期间多个操作中,数据不会凭空消失或增加,数据的每一个增删改查都有因果关系,例如A转200给B,不会出现A扣费了,B没收到情况
  • 事务执行之前和之后,数据符合自己设置的CHECK约束触发器设置
  • 隔离性(I):防止多个事务并发交叉执行导致数据不一致
  • 通过锁来实现的,通过阻塞来阻止
  • 持久性(D):事务结束后对数据的修改是永久的,即便系统故障也不会丢失
  • 事务在提交前,先写入事务日志中,数据库故障时重启MySQL,首先检查日志顺序号,将本应对数据库的更改而未做的部分持久化到数据库

事务操作可能出现的数据问题

  • 脏读:事务A读取事务B更新的数据,B进行回滚,A读到脏数据
  • 不可重复度:事务A多次读取同一数据,B在A多次读取过程中,对数据更新并提交,导致A多次读取同一数据时,结果不一致
  • 幻读:系统管理员A对数据库所有学生成绩从具体分数改为ABCDE等级,但管理员B插入一条具体分数记录,当A改结束后未提交发现还有一条记录没有改过来即产生幻读现象

事务操作可能出现的更新丢失问题

  • 第一类更新丢失:事务A回滚覆盖了事务B已提交的结果
  • 第二类更新丢失:事务A提交覆盖了事务B提交的结果

隔离性级别

  • 读未提交:事务可读取其他事务修改后还未提交的数据
  • 读提交:事务不可读取其他事务修改后还未提交的数据
  • 可重复度:事务执行期间不能读取其他事务还未提交的数据,也不能读取其他事务更新提交后的数据
  • 可串行化:强制事务串行执行
事务隔离界别脏读不可重复读幻读
读未提交
读提交
可重复度是(×)
串行化
  • 级别隔离强度:读未提交<读提交<可重复读<串行

注意: MySQL中RR级别不会产生幻读现象,事务A更新所有记录中某个字段,事务A获得表锁,事务B插入数据时无法获取锁阻塞,只有事务A提交释放锁后事务B才可进行接下来操作

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页