精华内容
下载资源
问答
  • 数据库中事务
    千次阅读
    2019-09-03 19:56:49

    事务

    事务是数据库操作最小单元,把多件事当一件事来处理,是一组不可在分割的操作集合。作为单个逻辑工作单元执行一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。

    特性ACID(原子性、一致性、隔离性、持久性)

    原子性:原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,,因此事务操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有一点影响。
    一致性:一致性是指事务必须使数据库从一个一致性状态转换到另一个一致性状态,就是说事务执行前后都必须处在一致性状态。
    隔离性:隔离性使当多个用户访问数据库时,比如操作同一张表,数据库开启的每一个事务,不能被其它事务干扰,多个并发事务之间相互隔离。
    持久性:持久性是指一个事务一旦提交,对数据库中数据的改变是永久的,即使是数据库系统遇到故障也不会丢失提交的事务操作。

    更多相关内容
  • 数据库中事务是什么意思?

    千次阅读 2019-05-07 09:45:55
    什么是事务?我们知道,数据库是一个面向多用户的共享机制,因此数据库管理系统应当具备并发控制和封锁机制,保证数据库系统的正常运行。但是当多个用户访问数据库的时候,如果每一个用户程序一个一个的串行执行,则...

    什么是事务?我们知道,数据库是一个面向多用户的共享机制,因此数据库管理系统应当具备并发控制和封锁机制,保证数据库系统的正常运行。但是当多个用户访问数据库的时候,如果每一个用户程序一个一个的串行执行,则每一时刻只有一个用户执行对数据库的操作,其他用户必须等待,这样的话会严重影响数据库资源的使用。所以数据库管理系统必有能够保证多个用户同时使用数据库。但是这样会出现以下三个主要异常问题:


    脏读数据:当第一个用户修改数据时,第二个用户在第一个用户没有确认修改之前读取了该数据,这时可能会出现脏读现象。如果第一个用户确认了修改,第二个用户检索不到数据库中所修改的数据,有时这种现象也称为丢失修改。
    不可重复读:当某一个用户对某一行数据进行第一次读取过程后,另外一个用户对该数据进行了修改,从第一个用户的角度来看,如果再次读取原先的数据会发现与前次不同,这就是不可重复读现象。
    发生幻象:当第一个用户检查某张表的时候,没有发现某个值X,但是在该用户还没操作完成之前,另外一个用户插入了一个X值,结果,导致第一个用户认为数据库没有X值,而实际上数据库有这个值X。这就是幻象。
    用户之间相互干扰,出现的以上问题,后果不堪设想。因此数据库系统采用事务的概念来解决这个问题。


    事务是一系列作为一个逻辑单元来执行的操作集合。它是数据库维护数据一致性的单位,它将数据库从一致状态转变为新的一致状态,说的简单一点就是,如果一组处理步骤要么全部发生要么一步也不执行,我们称该组处理步骤为一个事务。这样就保证了数据始终一致的状态,不至于破坏数据的完整性、可靠性。一个事务执行以后,DBMS会自动检查数据库中数据的一致性。


    确保数据的一致性是保证数据库里面的数据正确反映现实世界的前提。举个例子大家可能就清楚了,比如一个银行要将一笔钱从A->B;对数据库中的操作主要有两个步骤:一是从A账户中减去这笔钱;二是把B账户中的钱增加一笔。其实这两个步骤操作就是一个逻辑单元,就是一个操作集合,就是一个事务。这就要求两个步骤操作同步执行,要么它们都操作成功,要么都操作失败。如果一个操作失败,整个事务也就失败了,并且已经执行的操作都会被撤消,也就是回滚到先前的状态。


    SQLServer启动事务有三种模式:


    自动提交:在自动提交模式下,每一个SQL语句就是一个事务(也就是一个操作),语句执行完成以后,事务也就完成了,这时在这模式下,SQLSERVER自动结束事务。SQLSERVER为每个单独的语句提供这种事务模式,以保证数据的一致性。SQLSERVER的默认方式就是这种方式。但是如果是一组语句操作,要想使用事务模式就得采用下面的方式了。
    显式:当明确事务开始和结束的点时,所使用的就是显式事务模式。   开始事务语句:Begin Transaction;结束事务语句:Commit(成功提交)、Rollback(事务失败)。
    隐式:无论何时使用某些SQL语句,SQLSERVER就会隐式的启动一个事务。在这里他也把每一个SQL语句当作一个事务,只不过这种模式负责启动事务,而自动提交模式负责提交事务,也就是结束事务。
    举例说明如:begin transaction update_A  //开始事务


                         Update biao set A=2000


                         rollback transaction  update_A  //结束事务


     上面的情况是在SQL查询分析器中执行的,可以虚拟两个用户,同时对biao进行访问,一个更新数据,一个查询数据,两个用户访问时间交叉。

     

    文章来源:https://blog.csdn.net/qq_35302796/article/details/79125591

    展开全文
  • 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的...


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


    ⑴ 原子性(Atomicity)

      原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚

         因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

    ⑵ 一致性(Consistency)

      一致性是指事务必须使数据库从一个一致性状态   变换到   另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

      拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

    ⑶ 隔离性(Isolation)

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

      即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

      关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。

    ⑷ 持久性(Durability)

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

      例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。


    ----------------------------------------------------------------------------------------------------------------------  

      以上介绍完事务的四大特性(简称ACID),现在重点来说明下  事务的隔离性, 当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性。


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

    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中添加的,就好像产生幻觉一样,这就是发生了幻读。

      


        【幻读】和【不可重复读】都是读取了另一条已经提交的事务(这点只有脏读不同)。

        【不可重复读】查询的都是【同一个数据项】(ps:delete 或update  同一个数据项),

                            而【幻读】针对的是一批数据整体(比如数据的个数)。(ps:insert操作)

     


    现在来看看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对象无关。

     

    参考博客:

    http://www.zhihu.com/question/23989904

    http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html

    http://www.cnblogs.com/xdp-gacl/p/3984001.html

    展开全文
  • 数据库事务

    千次阅读 2022-06-15 11:49:13
    事务的基本概念

    • 定义

    事务(Transaction)是一系列的数据库操作,简而言之就是就是一个操作序列。可以是一条SQL语句,一组SQL语句或整个程序;一个应用程序通常包含多个事务。 

    BEGIN TRANSACTION   事务的开始。

    END TRANSACTION  事务的结束

    COMMIT   事务提交。事务成功执行,即通知事务管理器该事务所有操作现在可以被提交或者永久保存。

    ROLLBACK   事务回滚。事务执行失败,即通知事务管理器该事务出故障了,数据库可能处于不一致的状态,该事务所有更新操作必须撤销或者回滚。

    举例:账户A转入账户B 金额X元

    伪代码:

    BEGIN TRANSACTION 
       read(A);
     A=A-x;
     IF (A<0) then 
            Print(“余额不足”)
    ROLLBACK;
       ELSE
           write(A);
           read(B);
           B=B+x 
           write(A);
           COMMIT;
        ENDIF;
    END TRANSACTION 

    • ACID特性

    1.原子性atomicity

    事务中包括的操作要么都做,要么都不做Either all or none。

     2.一致性consistency

         一个事务独立执行的结果,将保持数据一致性如:增减平衡

    3. 隔离性isolation

          一个事务的执行不能被其他事务干扰。

    4. 持久性durability

            持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就必须是永久性的。

    • 状态

    1. 活动状态

    事务的初始状态。 正在执行事务就处于该状态下

    2. 部分提交

      操作序列的最后一条语句已经执行,此时处于部分提交状态。虽然事务已经完全执行,但是实际输出还可能驻留在内存中,一旦出现硬件问题,事务不得不终止,因此,此状态为部分提交。

    3. 失败的状态

    由于某些因素,事务不能正常继续,则该事务处于失败状态。

    4. 中止

    处于失败状态的事务,将中止或回滚事务以使数据库进入前一致状态。
    中止事务后,数据库恢复模块将选择以下两个操作之一:

    • 重新开始事务:事务中止由软硬件引起。
    • 杀死事务:事务中止由事务内部逻辑错误/输入错误等引起。

    5. 提交

    如果事务成功执行所有操作,则称该事务处于已提交状态。 在此状态下,所有效果现在都永久保存在数据库系统中。

    展开全文
  • 数据库中事务是什么?

    千次阅读 2021-07-28 20:59:24
    如果组的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将...
  • 数据库事务的简单介绍

    千次阅读 2022-04-12 22:07:09
    事务是逻辑上的一组数据库操作,要么都执行,要么都不执行。 例子:假如张三要给李四转账200元,这个转账会涉及到两个关键操作就是:将张三的余额减少200元,将李四的余额增加200元。如果两个操作之间突然出现错误...
  • 数据库中事务的四大特性(ACID)

    千次阅读 2018-11-26 16:16:11
    本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。  如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)  原子性是指事务包含的所有...
  • 什么是数据库事务

    千次阅读 2022-04-01 17:17:55
    数据库事务(简称事务)是数据库管理系统执行过程的一个逻辑单位,由一个有限的数据库操作序列构成。 数据库事务拥有以下四个特性,被称为ACID特性。 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对...
  • 数据库事务的四大特性

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

    千次阅读 2019-05-12 23:00:37
    事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 2 .一致性 事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结...
  • 数据库中事务概念的定义

    千次阅读 2012-07-03 20:58:49
    在我的理解事务是一个很普遍的概念,即任何一条sql语句的执行都是一个事务的处理过程,都包括了:注册驱动,创建连接,创建sql语句,执行sql语句,最后就是资源的释放。整个的这样一个过程就是事务的处理过程。...
  • 数据库事务的四大特性和隔离级别
  • 数据库杂谈(九)——事务管理

    千次阅读 2022-03-28 16:20:07
    事务管理和恢复机制
  • 用户的操作由一系列数据库操作组成的,这一系列操作应该作为整体执行,要么全部执行,要么全部不执行。 四大特性(ACID): 1、原子性(Atomic) 事务的操作作为整体执行,要么全部执行,要么全部失败 2、一致性...
  • 数据库事务的四大特性(ACID)

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

    千次阅读 2020-11-02 09:51:57
    **数据库隔离级别:**是在在数据库操作,为了有效保证并发读取数据的正确性提出的。 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的...
  • 数据库事务处理

    千次阅读 2020-06-02 22:55:57
    数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。 数据库...
  • 数据库中事务

    万次阅读 多人点赞 2018-08-05 16:46:27
    定义:事务就是一个对数据库操作的序列,是一个不可分割的工作单位,要不这个序列里面的操作全部执行,要不全部不执行。 特性:原子性 (Atomicity) 持久性(Durability) 一致性(Consistency) 隔离性...
  • 数据库事务的四种隔离级别

    千次阅读 2019-04-13 20:09:06
    spring(数据库事务隔离级别分为四种(级别递减): 1、Serializable (串行化): 这是数据库最高的隔离级别,这种级别下,事务“串行化顺序执行”,也就是一个一个排队执行。 这种级别下,“脏读”、“不可...
  • 可以帮助读者迅速了解数据库事务以及事务的介绍能为以后的开发提供一些实际操作的经验。
  • 数据库中事务的概念及其性质

    千次阅读 2008-11-08 10:06:00
    事务时访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。事务的性质有如下几个: 1.原子性。即不可分割性,事务要么全部被执行,...
  • 数据库事务和spring事务的区别

    千次阅读 2022-03-17 11:45:24
    数据库事务和spring事务 本质上其实是同一个概念,spring的事务是对数据库的事务的封装,最后本质的实现还是在数据库,假如数据库不支持事务的话,spring的...其实这里还有个重要的点,那就是事务中涉及的隔离级别,以及sprin
  • 数据库事务的概念及其实现原理

    千次阅读 2021-07-02 10:59:05
    1.1 为什么需要数据库事务 1.2 什么是数据库事务 1.3 事务如何解决问题 1.4 事务的ACID特性以及实现原理概述 2.并发异常与并发控制技术 2.1 常见的并发异常 2.2 事务的隔离级别 2.3 事务隔离性的实现...
  • Spring的事务及数据库事务的关系

    千次阅读 2019-06-13 17:23:24
    Spring的事务及数据库事务的关系 一、MySQL的事务 如果对MySQL的事务不了解的话,请先看 基于MySQL 8.0 对事务的深度理解 二、Spring的事务 Spring管理事务的方式 编程式事务 编程式事务就是利用手动...
  • 数据库事务管理

    万次阅读 2019-11-16 19:03:12
    java数据库事务管理原理 --------------------------------------------------------------------------------------------------------------------------------------------------------------- 1、事务概念...
  • 数据库事务详解

    千次阅读 2021-02-24 17:15:40
    数据库事务详解 提示:事务主要是为了保证复杂数据库操作数据的一致性,尤其是在并发访问数据时。MySQL事务主要用于处理操作量大,复杂度高的数据。 一、什么是数据库事务? 从根本上理解MySQL事务,是指作为单个...
  • SQL数据库——事务

    千次阅读 多人点赞 2020-05-27 11:55:13
    关于SQL Server数据库—事务 什么是数据库的事务? 事务有哪些特性 ? 事务常用语句有哪些? 如何在Spring配置文件中定义事务...1、原子性(atomicity) 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都
  • 数据库事务机制

    千次阅读 2017-10-01 13:45:42
    数据库事务机制 为什么需要事务,并发访问数据会造成什么问题 事务的ACID原则 事务的隔离级别 数据库的锁机制 为什么需要锁,存在哪些锁 悲观锁 数据库的悲观锁有两种实现方式:共享锁和排它锁,根据锁的...
  • 常用的存储引擎有InnoDB(MySQL5.5以后默认的存储引擎)和MyISAM(MySQL5.5之前默认的存储引擎),其中InnoDB支持事务处理机制,而MyISAM不支持 事务是一个整体, 由一条或者多条SQL语句组成, 这些SQL语句要么都执行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 919,395
精华内容 367,758
关键字:

数据库中事务