• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
CaoJianbang
邦哥
博客园    首页    新随笔    联系   管理    订阅  订阅

事务

原子性:事务里的操作要么全部成功,要么全部失败,undo log保证

一致性:是指数据库从一个一致性状态变到另一个一致性状态,比如a扣钱,b加钱,之后达到新的一致

隔离性:一个事务在提交或回滚前,对其他事务不可见

  隔离级别:

    read uncommit: 读未提交,一个事务update之后,还没有commit时,能读到update之后的数据,这个数据不准确,可能回滚,产生脏读

    read commit: 不可重复读,select获取的数据,又重新select的时候,数据产生变化,由其他事务改变了

    repeatable read: 可重复读,select获取的数据,又重新select的时候,数据不会产生变化,即使其他事务改变了这个数据

    serializable:串行,能解决上面所有问题,但是性能低下

持久性:数据一旦提交,永久保存,redo log保证

 

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted) 是 是 是
读已提交(read-committed) 否 是 是
可重复读(repeatable-read) 否 否 是
串行化(serializable) 否 否 否

 

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

 

理解:

脏读:读到未提交的数据

不可重复读:读到的数据不一致

可重复读:读到的数据一致,哪怕数据被其他事务修改

幻读(只针对数据条数增加):查的时候没有,插入的时候失败,因为其他事务插入了

  解决方案:1,修改隔离级别为串行化  2,查的时候加行锁,select ** for update,虽然没有数据,但是行锁已存在,行锁锁定的是索引,其他事务就无法插入此索引的记录

posted @ 2022-10-31 17:40  CaoJianbang  阅读(173)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3