zoukankan      html  css  js  c++  java
  • 事务处理

    一.什么是事物

          事务是单个的工作单元 如果某一事务成功,则在该事务中进行的所有的数据更改均会提交,称为数据库中的永久组成部分。        

          如果事务遇到错误且必须取消或回滚,则所有数据更改均被清楚。

     二.事务的概念     

    “一荣俱荣,一损俱损”这句话很能体验事物的思想,很多复杂的事物要分步进行,数据库中的事物是一种机制,

    每一个事物是一个独立的工作单元,它包含了一组数据库操作命令,且这组命令要么都执行,要么都不执行,是

    一个不可分割的工作逻辑单元。

     三.事物的作用        

       要么所有的操作全部完成,要么所有操作都不执行。

    四.为什么使用事物   

         事务处理可以确保除非事务性单元内的所有操作都成功完成,

    五.事务的特性         

    事务必须具备以下四个属性,简称ACID 属性:             

    1. 原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么全做,要么全不做(all or none)。

    2. 一致性(Consistency) 在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态。

    拿银行转账来说,一致性要求事务的执行不应改变A、B 两个账户的金额总和。如果没有这种一致性要求,转账过程中就

    会发生钱无中生有,或者不翼而飞的现象。事务应该把数据库从一个一致性状态转换到另外一个一致性状态。

    3. 隔离性(Isolation) 事务隔离性要求系统必须保证事务不受其他并发执行的事务的影响,也即要达到这样一种效果:

    对于任何一对事务T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前已经结束,要么在 T1 完成之后才开始执行。这

    样,每个事务都感觉不到系统中有其他事务在并发地执行。

    4. 持久性(Durability) 一个事务一旦成功完成,它对数据库的改变必须是永久的,即便是在系统遇到故障的情况下也不会丢失。

    数据的重要性决定了事务持久性的重要性。

    六.如何创建事务          

      1. T-SQL使用下列语句来管理事务:           

      (1).开始事务:BEGIN TRANSACTION             

      (2).提交事务:COMMIT TRANSACTION             

      (3).回滚(撤销)事务:ROLLBACK TRANSACTION  

     一旦事务提交或回滚,则事务结束。          

        (1).判断某条语句执行是否出错:          

        (2).使用全局变量@@ERROR。          

        (3).@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计。             

            如:SET @errorSum=@errorSum+@@error。

    七.事务的分类            

       (1).显示事务:用BEGIN TRANSACTION明确指定事务的开始,后续的t_sql语句都是一个整体。       

        (2).隐性事务:使用SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,当以隐式事务操作时无需手动开始事务,只需要提交或回滚事务。      

       (3).自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果执行失败,则自动回滚。

     八.创建事务的原则            

       创建事务时要遵守一下的原则:           

       (1).事务要尽可能的简短。             

       (2).在事务中访问的数据量要尽量最少 。            

       (3).浏览数据是尽量不要打开事务 。           

       (4).在事务处理期间不要请求用户输入。

    九.使用事务的注意事项       

          (1).在每个操作之后,都要检查@@error或rowcount的值。         

          (2).当一个事务结束之后,紧跟在事务之后的T-SQL代码可以继续执行,但是出错后不能再回滚事务了。          

           (3).已经提交完毕的事务会将数据正式写入数据库。         

          (4).在一个事务执行时,如果发生如断电等意外事件,则在下次重新启动系统时,该事务会自动回滚。   

          (6).在事务里发生错误是的事务无法执行下去,事务也会自动回滚。         

           (7).无法回滚的语句不能在事务中使用。

     十.事务的工作原理            

               (1).在事务开始时,SQLServer会将要修改的数据锁定,同时创建一个临时的事务日志,在该临时的事务日志里存放更改的数据和更改的存储过程。  

               (2).在事务未提交之前,事务中所有的数据操作是临时的,一旦发生数据操作失败,就使用临时日志里的数据去回滚事务操作,并解除锁定。在事务         

                 被成功提交后,数据库就将临时的事务日志的内容存储到数据库中,此时事务操作完成。

     十一.事务的隔离级别      

                      可以分为以下五个级别:        

              (1).Read uncommitted:不隔离数据          

              (2).Read committed:不允许读取没有提交的数据       

              (3).Repeatable Read:在事务中锁定所读取的数据不让别人修改和删除。     

              (4).Snashot:快照隔离,可以为读取数据的事务提供所需数据的一个已提交的版本。      

              (5).Serializable:将事务所要用到的数据表全部锁定,不与许其它事务添加、修改和删除数据。

  • 相关阅读:
    【Oracle】将表名与字段名连接成一行数据展示,字段名使用顿号的分隔
    【Accountancy】资产
    【FinacialKnowledge】财务报表及名词解释
    模块独立性原理
    C# this.Invoke()的作用与用法
    浅谈C#委托和事件(转载)
    C#三种定时器的实现
    一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    c++ comment
    C#使用StreamWriter类写入文件文件
  • 原文地址:https://www.cnblogs.com/wdwf/p/3068109.html
Copyright © 2011-2022 走看看