zoukankan      html  css  js  c++  java
  • 数据库ACID以及事务的隔离

    一、ACID

    A:Atomicity 原子性

      我们把事务划分成原子一样,比方说a转钱给b,不能出现a扣了钱b没收到。所有环节中任意一个出错事务就必须回滚。

    C:Consistency 一致性

      事务必须使得数据库从一个一致性状态改变到另一个一致性状态。比方说a和b之间互相转钱,而a和b的资产总额有100w那么多,

    那么怎么转都不会说总和部署100w

    I:Isolation 隔离性

      隔离性是当多个用户并发访问数据库时,比方说操作同一张表的时候,数据库为每一个用户开启的事务不能被其他的事务操作所干扰,多个并发事务之间要互相隔离。

    D:Durability 持久性

      持久性是指一个事务一旦被提交了那么对数据库中数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失对事务的操作。

    二、脏读、不可重复度和幻影读

    对于上面的隔离性I,因为以下几种情况,可以提出几种隔离机制

    脏读:

    事务a读取了事务b中尚未提交的数据

    比方说我给你转了100万,还没提交,这时候你看多了100万很开心,但是我发现转错人撤回去了,这个过程你就读到了没提交事务的数据

    不可重复读取(update)

      对于在数据库中的某个数据,一个事务多次查询却返回了不同的数据,因为在查询的间隔,被另一个事务修改并提交了。

    不可重复读取和脏读的区别是:前者读取了他人更新操作·提交的数据,后者读取的他人更新操作时没提交的东西。

    幻读(insert or del)

      在两个连续的查找之间一个并发的修改事务修改了查询的数据集,导致这两个查询返回了不同的结果。,导致a多次读取的数据不一致,幻读和不可重复读的区别在于不可重复读为update操作,幻读为insert操作或者删除操作。

    第一类事务丢失

    A事务撤销时,把已经提交的B事务的更新数据覆盖了。例如:

    这时候事务a撤销事务的时候,余额就变为1000

    第二类事务丢失

     根据第一类我们很容易推导出第二类事务更新丢失。A事务覆盖B事务已经提交的数据,造成B事务所做的操作丢失 。

    解决方案

     为了解决上述方案,数据库通过锁机制解决并发访问的问题。根据锁对象的不同我们分为行级锁和表级锁;直接使用锁机制管理很复杂,基于锁机制,数据库给用户提供了不同的事务隔离级别。隔离级别越高并发性越低。

     

  • 相关阅读:
    质量标准
    期权只是一张纸而已,但它的背后是心机
    Spring注解 @Resource和@Autowired
    Java7新语法 -try-with-resources
    Spring中Bean的命名问题及ref和idref之间的区别
    mybatis注解详解
    jquery ajax局部加载方法介绍
    SpringMVC批量上传
    【uploadify3.1使用二】批量文件、图片上传
    IE浏览器上传文件时本地路径变成”C:fakepath”的问题
  • 原文地址:https://www.cnblogs.com/daysn/p/11410625.html
Copyright © 2011-2022 走看看