精华内容
下载资源
问答
  • 数据库事务的四个特征
    千次阅读
    2019-03-06 19:19:23

    四个特征:原子性、一致性、隔离性、持久性


    原子性: 事务是数据库的逻辑工作单位,事务中的操作要么全做,要么不做。
    一致性: 事务执行的结果必须是使数据库从一个一致性变到另一个一致性。
    隔离性: 一个事务的执行不能干扰其他事物。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。
    持久性: 一个事务一旦提交,他对数据库中的数据的改变应该是永久性的。接下来的其它操作或者故障不应该对其执行结果有任何影响。

    更多相关内容
  • 1. 事务的四大特征(ACID) 原子性(Atomicity):事务包含所有操作要么全部成功,要么全部回滚。 一致性(Consistency):一个事务执行之前和执行之后都必须处于一致性状态。 隔离性(Isolation):并发的事务是...
  • 数据库事务的四大特性和隔离级别

    一、数据库事务的四大特性

    事物是指作为一个单元的一组有序的数据库操作,单元是不可分割的,如果一组数据的所有操作都执行成功,事物完成,进行事物提交(commit),其修改作用于所有数据库进程。有一个操作执行失败,事务执行失败进行回滚(rollback),该事务所有操作的影响被取消;

    原子性(Atomicity)

    事物的操作要么全部执行成功提交,要么全部失败进行事物回滚,执行成功,对数据的改变将作用于其它数据库,执行失败,将不对其它数据库产生影响;

    一致性(Consistency)

    事务的执行使数据库从一个状态到另一个状态,状态必须保持一致性,比如两个人进行转账,两个的总金额是1000,不过他们进行了多少次转账(事务),两个人的总额1000是不变的,这就是一致性状态;

    持久性(Osolation)

    事务执行成功,对数据库数据的修改是永久性的,即使服务器宕机,也不会丢失已提交事务的操作;

    隔离性(durability)

    多个线程并行对表执行事务,每个事务对其它事务都是隔离互不影响的,比如有两个线程A和B对同一数据S进行事务执行,线程A在获取数据S时,线程B的事务要么已经提交结束,要么还未执行

    二、事务四个隔离级别

    数据库隔离的四个级别分别是:1、读取未提交;2、读取已提交;3、可重读;4、可串行化。隔离级别采取不同的锁类型来实现,若读取的是同一个数据可能发生脏读、幻读等问题

    读未提交(Read Uncommitted)

    在该隔离级别,所有事物都可以看到其它事务未提交的执行结果,事务可读取其它事务未提交的数据;也就是“脏读”

    读已提交(Read Committed)

    事务只能看见其它事务已经提交的结果数据,在执行查询操作期间,同一事务的其它操作可能在这一操作期间进行了commit,到查询的结果集和上次查询的结果集不一样,也就是“不可重复读”

    可重复读 (repeatable Read)

    MySql的默认隔离级别,保证同一事务的不同操作在并发读取的行数据是一样的。在事务读取某一范围的数据期间,不保证其它事务对该范围写入新行,造成事务下次查询的时候,多了新的数据行,也就是所谓的**“幻读”**,Innodb通过版本控制解决了这一问题。

    序列化(Serializable)

    隔离的最高级别,通过强制让事务有序执行,解决幻读等问题。事务执行期间,对每个数据行加了共享锁,可能会引起其它事务查询超时等现象;

    三、脏读、幻读、不可重复读

    脏读(Drity Read )

    事务读取了其它事务执行未提交的数据行

    幻读(Phantom Read)

    事务在检索期间,其它事物是数据执行了更新操作,导致前后两次检索的数据不一样

    不可重复度 (Nonrepeatable Read)

    事物在检索期间,同一事物的不同操作(实例)对数据行修改后进行了commit,导致前后检索的数据行不一致

    与隔离级别的关系

    隔离级别脏读不可重复读幻读
    读未提交+++
    读已提交x++
    可重复读xx+
    可序列化xxx
    展开全文
  • 数据库事务四大特性

    千次阅读 2019-03-05 16:26:03
    如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1、原子性(Atomicity)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到...

    一、事务的四大特性(ACID)
    如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:

    1、原子性(Atomicity)
      原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

    2、一致性(Consistency)
      一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
      拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

    3、隔离性(Isolation)
      隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
      即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

    4、持久性(Durability)
      持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
      例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,
    即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。

    二、事务的隔离级别(默认事务级别为可重复读)
    总的说,数据库事务无非就两种:读取事务(select)、修改事务(update,insert)。在没有事务隔离控制的时候,多个事务在同一时刻对同一数据的操作可能就会影响到最终期望的结果,通常有四种情况:
    (1) 两个更新事务同时修改一条数据时,很显然这种情况是最严重的了,程序中无论如何也不能出现这种情况,因为它会造成更新的丢失!
    (2) 一个更新事务更新一条数据时,另一个读取事务读取了还没提交的更新,这种情况下会出现读取到脏数据。
    (3) 一个读取事务读取一条数据时,另一个更新事务修改了这条数据,这时就会出现不可重现的读取。
    (4)一个读取事务读取时,另一个插入事务(注意此处时插入)插入了一条新数据,这样就可能多读出一条数据,出现幻读。
    以上四种情况描述完毕,相信大家也发现规律了,前三种是对同一条数据的并发操作,对程序的结果可能产生致命影响,尤其是金融等实时性,准确性要求极高的系统,绝不容许这三中情况的出现,
    相比第四种情况不会影响数据的真实性,在很多情况下是允许的,如社交论坛等实时性要求不高的系统!
    综上四个情况,我们可以大致这样简单的理解(最初说的两种事务的自由组合2*2=4):
    A) 修改时允许修改(丢失更新)
    B) 修改时允许读取(脏读)
    C) 读取时允许修改(不可重复读)
    D) 读取时允许插入(幻读)
    从上到下问题越来越不严重,但所需的性能开销却越大。因为不同的系统允许不同级别的情况,所以就出现了事务隔离这么一个东东,来允许我们设定数据库的并发行为。

    总结下如果不考虑事务的隔离性,会发生的几种问题:

    1,脏读
      脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
      当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。例如:用户A向用户B转账100元,对应SQL命令如下
    update account set money=money+100 where name=’B’; (此时A通知B)
    update account set money=money - 100 where name=’A’;
      当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。

    2,不可重复读
      不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
      例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。
      不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
      在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据A和B依次查询就可能不同,A和B就可能打起来了……

    3,虚读(幻读)
      幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
      幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

    SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

    MySQL数据库的四种事务隔离级别
    Read Uncommitted(读取未提交内容)
    在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read);

    Read Committed(读取提交内容)
    这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果;

    Repeatable Read(可重读)
    这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。
    简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
    InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题

    Serializable(可串行化)
    这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
    这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:

         脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。
         不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。
         幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。
         在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:
    

    ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
      ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
      ③ Read committed (读已提交):可避免脏读的发生。
      ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

    以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。

    在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

    在MySQL数据库中查看当前事务的隔离级别: select @@tx_isolation;

    在MySQL数据库中设置事务的隔离 级别:

    set [glogal | session] transaction isolation level 隔离级别名称;

    set tx_isolation=’隔离级别名称;’
    例1:查看当前事务的隔离级别:

    例2:将事务的隔离级别设置为Read uncommitted级别:

    或:

    记住:设置数据库的隔离级别一定要是在开启事务之前!

    如果是使用JDBC对数据库的事务设置隔离级别的话,也应该是在调用Connection对象的setAutoCommit(false)方法之前。调用Connection对象的setTransactionIsolation(level)即可设置当前链接的隔离级别,至于参数level,可以使用Connection对象的字段:

    在JDBC中设置隔离级别的部分代码:

    后记:隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对该Connection对象有效,与其他链接Connection对象无关。

    展开全文
  • 数据库事务的四大特性

    千次阅读 2022-07-11 11:21:08
    数据库事务的四大特性

    事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。

    1 、原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

    2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

    3 、隔离性。一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

    4 、持续性。也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

    Mysql的四种隔离级别


    SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

    Read Uncommitted(读取未提交内容)

     

    在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

    Read Committed(读取提交内容)

     

    这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

    Repeatable Read(可重读)

     

    这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

    Serializable(可串行化)

    这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

    展开全文
  • 数据库事务四大特征ACID

    千次阅读 2018-08-06 22:03:29
    数据库事务,必须支持以下特征: 1. 原子性(Atomicity) 在一个事务内的操作,要么全部成功,要么全部失败。 2. 一致性(Consistency) 数据库从一一致性状态,转移到另一一致性状态。 3. 隔离性...
  • 数据库事务的四大特性(ACID)

    万次阅读 2019-06-18 17:10:04
    数据库事务的四大特性 1, 什么是数据库事务? 数据库管理系统执行过程中的一逻辑单位,由一有限的数据库操作序列构成。 意思就是一连串的数据库操作,即一串增删查改的集合。 2, 数据库事务做了什么? ...
  • 数据库事务隔离的四个级别

    千次阅读 2020-11-02 09:51:57
    **数据库隔离级别:**是在在数据库操作中,为了有效保证并发读取数据的正确性提出的。 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也...**READ UNCOMMITTED(读未提交数据):**允许事务读取未
  • 数据库事务四大原则

    千次阅读 2019-07-16 11:34:34
    很多复杂的事务要分布进行,...数据库事务由严格的定义,它必须满足4特性: 原子性(Atomicity),一致性(consistency),隔离性(Isolation),持久性(Durability)。 原子性: 表示组成一事务的多数据库操作是一...
  • 数据库事务四大基本要素

    千次阅读 2018-05-03 10:31:31
    数据库事务四大基本要素简介这四大基本要素也可以理解成一个事务的四个特点,分别是原子性、一致性、隔离性和耐久性,各自对应的英文是Atomicity、Consistency、Isolation、Durability,所以经常在一些文档或帖子中...
  • 数据库四 事务管理机制

    千次阅读 2022-03-25 15:36:59
    通过实验理解事务机制,包括事务的提交、回滚以及死锁; 事务的并发控制; 理解脏读 【实验具体要求】: 利用事务完成如下修改:将教师号“1”修改为“4”,同时修改所有使用该教师号作为外键关联的表中的该...
  • 数据库事务四个基本要素

    千次阅读 2016-04-28 11:21:59
    ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性...
  • 数据库事务种隔离级别

    千次阅读 2019-04-13 20:09:06
    spring(数据库事务隔离级别分为种(级别递减): 1、Serializable (串行化): 这是数据库最高的隔离级别,这种级别下,事务“串行化顺序执行”,也就是一排队执行。 这种级别下,“脏读”、“不可...
  • 数据库事务四个特性及含义

    万次阅读 2019-07-04 21:57:57
    ACID 表示事务的特性:原子性、一致性、隔离性和持久性。 原子性(Atomic):事务中各项操作,要么全做要么全不做,任何一项操作的失败都会 导致整个事务的失败; 一致性(Consistent):事务结束后系统状态是一致的; ...
  • 一、什么是事务?         **事务(Transaction)是访问并可能更新数据库中各项数据项的一...事务是一不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结
  • 数据库特点、四大特征、并发事务引起的问题 数据库4基本特点: 1.数据结构化 2.数据的共享性高,冗余度低,易扩充 3.数据独立性高 4.数据由DBMS统一管理和控制   特点: 共享性高,冗余度低,易扩充 ...
  • 关系型数据库事务之四大特性

    千次阅读 2020-03-11 12:51:53
    数据库系统必须维护事务的以下特性(简称ACID):   原子性(Atomicity)   一致性(Consistency)   隔离性(Isolation)   持久性(Durability) ⑴ 原子性(Atomicity)  原子性...
  • 什么是数据库事务

    千次阅读 2022-04-01 17:17:55
    数据库事务拥有以下四个特性,被称为ACID特性。 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency):事务应确保数据库的状态从一个...
  • MySQL数据库事务的四大特性以及事务的隔离级别

    万次阅读 多人点赞 2018-08-18 23:16:11
    目录 一、事务的四大特性(ACID) 1、原子性(Atomicity) 2、一致性(Consistency) ...MySQL数据库事务隔离级别 Read Uncommitted(读取未提交内容) Read Committed(读取提交内容) Repeatable...
  • 数据库事务四大特效

    千次阅读 2019-02-18 13:46:38
    一、定义:数据库的四大特性缩写是ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。...五、持久性:事务一旦提交,对数据库的修改就是永远的。  ...
  • 数据库事务详解

    千次阅读 2021-02-24 17:15:40
    数据库事务详解 提示:事务主要是为了保证复杂数据库操作数据的一致性,尤其是在并发访问数据时。MySQL事务主要用于处理操作量大,复杂度高的数据。 一、什么是数据库事务? 从根本上理解MySQL事务,是指作为单个...
  • 现实生活中我们经常会进行银行转账操作,该操作可分为两部分来完成:账户A转出和账户B...在数据库中,可通过两条语句完成该转账操作,如果其中任意一条语句出现异常没有正常执行则会导致两账户的金额不同步造成错误。
  • 深入详解数据库事务(开发必用)

    千次阅读 多人点赞 2022-04-05 21:20:21
    一.事务的概念:
  • 数据库事务一致性的理解

    千次阅读 2022-01-25 12:00:48
    一致性是数据库系统的一项要求:任何数据库事务修改数据必须满足定义好的规则,包括数据完整性(约束)、级联回滚、触发器等。 我对一致性的理解 “一致”是指数据库中的数据是正确的,不存在矛盾。事务的一致性是...
  • 数据库事务概念 ...数据库事务四个基本性质(ACID) 1. 原子性(Atomicity) 事务的原子性是指事务是一个不可分割的工作单位,这组操作要么全部发生,否则全部不发生。 2. 一致性(Consistenc
  • 使用Spring框架实现数据库事务处理

    千次阅读 2020-03-02 21:20:45
    企业级应用系统在更新数据库数据时,一般都采用数据库事务处理,以确保数据库数据的一致性。本文主要讨论在Spring框架中如何使用数据库事务处理更新数据库数据。通过本课的学习,可以达到如下目标。 ● 了解JDBC对...
  • 一、事务的概念 事务:是数据库操作的最小工作单元,是作为单个...事务数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 2 、一致性 事 务执行的结果必须是使数据库从一一致性状态变到另一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 322,986
精华内容 129,194
热门标签
关键字:

数据库事务的四个特征