zoukankan      html  css  js  c++  java
  • 数据库的隔离级别

    数据库的隔离级别有四种:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和序列化(Serializable)

    事务的四个特性:原子性、一致性、隔离性、持久性

    多事务并发执行常见的问题:脏读、幻读、不可重复读

    原子性:即组成事务的多个数据库操作是不可分割的原子单元。所以一个事务中的所有操作要么全部成功进而提交,要么有任意一个或多个失败,那么即便是其他已成功的操作也要回滚让数据库恢复到事务开始之前的状态。

    一致性:事务操作提交成功后,数据库所处的状态和他的业务规则是一致的,即数据不会被破坏。

    隔离性:在并发进行数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对其他事物产生干扰。准确地说,并非是完全无干扰。数据库规定了多种事务隔离级别,不同的隔离级别对应不同的干扰程度。隔离级别越高,数据一致性越好,但并发性越弱。

    持久性:一旦事务提交成功后,事务中所有的数据操作都必须被持久化到数据库中。即使在事务提交后,数据库马上崩溃,在数据库重启时,也必须保证能够通过某种机制恢复数据。

    脏读:事务1更新了数据,但没有提交;事务2读取了更新后的数据。然后事务1回滚了,事务2读取到的数据是无效的。

    幻读:事务1读取数据时事务2增加了一条记录并提交,事务1再次读取时可以读取到事务2新增的那一条记录。或者可以这样说,幻读是指在同一个事务的两次查询(同一范围)中,后一次查询读取到了前一次查询没有读取到的数据。更通俗点说,事务1第一次读取还没有那条记录,第二次读取却有了那条记录,是不是跟见鬼了一样?难道第一次是幻觉?

    不可重复读:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录。通俗点说:事务1第一次读到的数据是这样的,第二次读到的却是那样的......

    幻读和不可重复读:不可重复读重点在于update和delete,而幻读的重点在于insert。举个例子,就像某些kong bu dian ying里面的场景,第一次看门口是没有人的,然后回个头的时间再去看门口有一个人影......这就是幻读;而不可重复读是指你第一次看到的门是2米高1米宽的,然而你回个头再去看门就变成了1米高0.5米宽......和刚才看到的不一样了。一样都是吓人,但是吓人的方式不一样了。

    读未提交:事务中修改的数据,即便该事务还未提交,其他事务也可以读取到。可能会因此出现脏读、幻读和不可重复读。

    读已提交:事务中修改的数据,只能等事务提交后才能够被读取到。可能会因此产生不可重复读和幻读。

    可重复读:事务开始读数据的时候,就对数据加了一个悲观锁,其他事物不能够修改数据,因此可以保证前后读取到的数据一致。但是,它不会锁住insert的数据,因此依然会存在幻读的情况。

    串行化:串行化是最高的隔离级别。它通过强制事务串行执行,避免了前面的幻读情况。由于它大量加上锁,导致大量的请求超时,因此性能会比较低下。在特别需要数据一致性且并发量不大的时候才可能会考虑使用这个隔离级别。

  • 相关阅读:
    Linux操纵体系备份工具Tar运用说明
    Linux琐屑网络设置细致分解
    若何制造Linux系统启动盘2
    RedHatAS5下整合Apache和Tomcat
    移除Linux体系下不需求的效劳
    Linux平安隐患及增强管理的方法1
    Fedora 9 布置好后启动不克不及进入GUI,表现屏表现“Out Of Range"的处理惩罚法子
    Linux和Unix最常用的收集下令
    若何彻底移除编造机Wine模仿程式的图标
    若何制造Linux系统启动盘1
  • 原文地址:https://www.cnblogs.com/yangwanhao/p/11329699.html
Copyright © 2011-2022 走看看