zoukankan      html  css  js  c++  java
  • 数据库事务

    四大特性:ACID

      1、原子性(Atomicity,或称 不可分割性):一批操作,要么全部成功,要么全部不成功。

      2、一致性(Consistency):结果唯一、精确、无脏数据。

      3、隔离性(Los): 多个事务并发的时候,保证各个事务之间的隔离性。

      4、持久性(Durability): 将数据存入硬盘。

    事务的隔离性:

    隔离级别 脏读取 不可重复读 幻读
    读未提交(Read  Uncommitted)  yes  yes  yes
    读提交(Read Committed)  no  yes  yes
    可重复读(Repeatable Read)  no  no  yes
    串行化(Serializable)  no  no  no

    脏读取:一个事务在执行过程中,读取了另外一个事务未提交的数据。

    不可重复读:一个事务中多次查询结果不唯一。首次查询与再次查询间隔间,另外一个事务提交,导致的结果不一致。(修改或删除)

    幻读:(数据的新增)

      事务a,执行查询操作,得到 3 条记录。

      事务b,执行查询操作,得到 3 条记录。

      事务b,执行 insert 操作,将一条记录插入表中,并提交事务。

      事务a,执行查询操作,由于隔离性(快照读取),结果依然为 3 条记录。当事务a,执行 insert 操作时,发现表中已经存在id = 4的记录了,就跟产生了幻觉一样。

    mysql InnoDB MVCC (Multiversion Concurrency Control ,多版本控制)

      它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。

    读锁:也叫共享锁、S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

    写锁:又称排他锁、X锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

    表锁:操作对象是数据表。Mysql大多数锁策略都支持(常见mysql innodb),是系统开销最低但并发性最低的一个锁策略。事务t对整个表加读锁,则其他事务可读不可写,若加写锁,则其他事务增删改都不行。

    行级锁:操作对象是数据表中的一行。是MVCC技术用的比较多的,但在MYISAM用不了,行级锁用mysql的储存引擎实现而不是mysql服务器。行级锁对系统开销较大,处理高并发不够好。InnoDB MVCC 比行锁性能好。

      InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),每开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID。

    select   

      InnoDB会根据以下两个条件检查每行记录::
      a.InnoDB只会查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的.。
      b.行的删除版本要么未定义,要么大于当前事务版本号,这可以确保事务读取到的行,在事务开始之前未被删除.。
      只有a,b同时满足的记录,才能返回作为查询结果。

    update

      InnoDB会为删除的每一行保存当前系统的版本号(事务的ID)作为删除标识.。
      InnoDB执行UPDATE,实际上是新插入了一行记录,并保存其创建时间为当前事务的ID,同时保存当前事务ID到要UPDATE的行的删除时间。

    delete,insert 可以根据上面的结论,进行推导。

    oracle 中解决幻读使用的技术:undo (待补充。。。)

    注意:事务的隔离级别和数据库并发性是成反比的,隔离级别越高,并发性越低。

  • 相关阅读:
    670. Maximum Swap
    653. Two Sum IV
    639. Decode Ways II
    636. Exclusive Time of Functions
    621. Task Scheduler
    572. Subtree of Another Tree
    554. Brick Wall
    543. Diameter of Binary Tree
    535. Encode and Decode TinyURL
    博客园自定义背景图片
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9842276.html
Copyright © 2011-2022 走看看