zoukankan      html  css  js  c++  java
  • 事务隔离怎么保证

    一、什么是事务

      事务:在数据库操作中事务就是一条或者多条SQL语句组成的一个不可分割的工作单元。

      特点:在事务当中的所有操作都正常完成时,整个事务才被提交到数据库当中,如果有一项操作没有完成,那么整个事务会被回滚。

    二、事务的四大特性(ACID)

      A : 原子性:

        同一个事务中可能有多条sql语句,要么全部成功,要么直接回滚

      C : 一致性:

        事务中操作的数据以及状态改变是一致性的,即写入的结果必须完全符合预设的规则,不会出现系统意外等原因导致状态不一致。

      I : 隔离性:

        一个事务所操作的数据在提交之前,对其他的事务的不可见

      D : 持久性:

        事务所做的修改会永久保存,不会因为系统意外导致数据丢失。

    三、事务的隔离性

      1、隔离性解决三大问题

        脏读 —— 还未提交的数据被读取出来

        不可重读——前后读取数据库的内容不一致

        幻读——前后读取数据库的总量不一致

      2、隔离级别

        RU——读未提交 : 会出现: 脏读,不可重读,幻读

        RC——读已提交: 防止脏读,会出现 不可重读和幻读

        RR——可重复读: 防止脏读,不可重复读,可能会出幻读 (默认级别)

        SR——串行化: 什么都能防止(多个会话窗口同步,不能并发,性能差)

    四、怎么保证隔离性?

      1、多版本并发控制(mvcc)(防止不可重复现象)

        ReadView——ReadView其实就是快照,每个事务在启动后第一次执行查询时会创建一份快照

      2、锁(解决了幻读问题)

        Gap Locks(间隙锁)——在索引记录之间加锁,或者在第一个索引记录之前加锁,或者在最后一个索引记录之后加锁

        Next-Key Locks(下一键锁)——在索引记录上加锁,并且在索引记录之前的间隙加锁

     

  • 相关阅读:
    6-查看centos中的用户和用户组
    23-python用BeautifulSoup用抓取a标签内所有数据
    22-python爬虫解决gbk乱码问题
    21-py3 发邮件
    20-调用百度AI的文字识别
    6-Ubuntu与Windows不能相互复制
    2018.4.18 Ubuntu 的telnet命令详解
    2018.4.17 java多线程练习二模拟开场仪式进场
    2018.4.16 Java多线程实现龟兔赛跑
    2018.4.15 Mac系统下如何使用StartUml画好需求分析的类图 (同样适用于windows)
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12177805.html
Copyright © 2011-2022 走看看