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才可进行接下来操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值