`
todayapple
  • 浏览: 40794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

事务(Transaction)

阅读更多
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操纵语言或编程语言书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句来界定。事务由事务开始和事务结束之间执行的全体操作组成。
   什么叫事务? 这些就是数据库特有的术语了。懒虫在这里口头解释:就是把多件事情当做一件事情来处理。也就是大家同在一条船上,要活一起活,要over一起over !

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

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

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


   我为什么要使用事务? 俺这里再举个很俗很俗的例子:

     俺到银行存钱,于是有这么几个步骤:
       1、把钱交给工作人员;2、工作人员填单;3、将单子给我签字;4、工作人员确认并输入电脑。

   要是,要是我把钱交给工作人员之后,进行到3我签字了。那哥们突然心脏病发作,over掉了,那,我的钱还没有输入电脑,但我却交了钱又签字确认了,而并没有其他任何记录。我岂不是要亏死了???我的血汗钱啊!赶紧退给我!!

   于是,在数据库里产生了这么一个术语:事务(Transaction),也就是要么成功,要么失败,并恢复原状。
  
   还是写程序把:

   Create Proc sp我去存款(@M Money , @iOperator Int)
   As
   Begin
    Declare @i int

    Begin Tran           --激活事务
     Exec @i=sp交钱 @m,@iOperator
     if @i<>0           --这里一般用系统错误号 @@Error。 我这里为了举例子没有用到。需要根据实际情况。
     begin
      Rollback Tran                   --回滚事务
      RaisError ('银行的窗口太少了,我懒得排队,不交了!:( ', 16, 1) with Log --记录日志
      Return -1                     --返回错误号
     end

     Exec @i=sp填单 @m,@iOperator
     if @i<>0
     begin
      Rollback Tran                   --回滚事务
      RaisError ('银行的哥们打印机出了点毛病,打印不出单子来,把钱退回来给我吧??', 16, 1) with Log
      Return -2                     
     end

     Exec @i=sp签字 @m
     if @i<>0
     begin
      Rollback Tran                   --回滚事务
      RaisError ('我 靠?什么烂银行,换了3支笔都写不出水来!!老子不存了!!不签!', 16, 1) with Log 
      Return -3                     
     end

     Exec @i=sp输入电脑 @m,@iOperator
     if @i<>0
     begin
      Rollback Tran                   --回滚事务
      RaisError ('什么意思?磁盘空间已满?好了好了,把钱给我,我到旁边的这家银行!', 16, 1) with Log 
      Return -4                     
     end
 
    Commit Tran        --提交事务
    Return 0
  End
 

       ----------------------------------------------------------------------
       以上是伪代码,模拟我去存款的过程。
分享到:
评论

相关推荐

    Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 Spring框架中的事务管理是通过TransactionManager来实现的,TransactionManager是Spring事务管理的核心组件。Spring提供了多种方式来配置事务,下面将详细介绍Spring...

    transaction事务

    根据给定的信息,本文将详细解析“transaction事务”这一核心概念及其在数据库操作中的应用,特别是结合提供的代码示例来探讨事务处理的具体实现方法。 ### 一、事务(Transaction)的基本概念 事务是数据库中一系列...

    oracle-事务oracle-transaction信息管理与信息系统学士学位论文.doc

    Oracle 事务Transaction 信息管理与信息系统学士学位论文 在这篇论文中,我们将讨论 Oracle 中的事务管理,涵盖事务的定义、特征、控制语句、原子性、一致性、隔离性、持久性等方面的知识点。 一、事务的定义 在...

    python django事务transaction源码分析详解

    在Django 1.8中,事务管理主要是通过`transaction`模块实现的,特别是`atomic`方法。本文将深入解析`transaction.atomic`的源码,帮助理解其工作原理。 首先,`transaction.atomic`有两种主要的使用方式:作为装饰...

    .NET简谈事务、分布式事务处理

    事务可以通过调用`Transaction.Commit()`方法提交,或者通过`Transaction.Rollback()`方法回滚。 **示例代码**: ```csharp using System; using System.Data.SqlClient; public class TransactionExample { ...

    含有事务操作的sqlhelper类C#

    2. **开始事务**:在执行任何数据库操作之前,通过调用`BeginTransaction()`方法启动一个新的SqlTransaction。这将创建一个事务上下文,所有后续的数据库操作都将在这个事务内执行。 3. **使用SQLHelper执行命令**...

    C#数据库事务原理及实践

    在SQL Server 2000中,可以通过`BEGIN TRANSACTION`命令开始一个新的事务,而C#中,可以使用`SqlTransaction`对象来创建和管理事务。 ```csharp using System.Data.SqlClient; // 创建数据库连接 SqlConnection ...

    (精选)CHI协议,transaction事务汇总

    CHI协议,transaction事务汇总: 1.部分事务分为ptl/full ,这里不做区分。 2.事务名基本可以“望文生义”,也就是我们代码所推荐的“命名即注释”。 3.部分事务的行为并不完全确定,个人推测。 4.针对request type...

    使用事务管理删除数据库记录 编程小实例,

    然后,通过调用BeginTransaction方法开始一个事务。接下来,设置SqlCommand对象,包括要执行的删除操作(在这里是`DELETE FROM YourTableName WHERE SomeCondition`,你需要根据实际情况替换)。如果删除操作成功且...

    RocksDB事务实现TransactionDB分析.docx

    创建事务上下文就像在MySQL中启动transaction一样: ```cpp // 配置选项 Options options; options.create_if_missing = true; TransactionDBOptions txn_db_options; // 打开支持事务的数据库 TransactionDB* txn...

    一个简单的方法来实现数据库的事务

    事务(Transaction)是数据库操作中的一个重要概念,它是一组操作的集合,这些操作要么全部成功,要么全部失败。事务具有四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性...

    Hibernate事务处理

    在进行数据库操作之前,需要首先通过`SessionFactory`获取一个`Session`实例,然后使用`Session`实例的`beginTransaction()`方法开启一个事务。如果不显式地使用事务,对于查询操作,Hibernate仍然可以正常执行并...

    springboot-transaction事务

    - 事务管理器(Transaction Manager):在Spring Boot中,如果检测到JPA或Hibernate,将会自动配置一个`PlatformTransactionManager`实例。 2. **JPA集成** - JPA是Java提供的ORM(Object-Relational Mapping)...

    C#操作事务

    在C#编程中,事务处理是一项关键功能,特别是在涉及到数据库操作时,如插入多条SQL语句。事务确保了数据的一致性和完整性,使得一系列操作要么全部成功,要么全部失败,避免了数据不一致的情况。以下是对"C#操作事务...

    dotnet事务处理方式

    在.NET框架中,事务处理是确保数据库操作一致性、完整性和可靠性的关键机制。当你需要执行一组相关的数据库操作,而这些操作必须全部成功或全部失败时,事务就显得尤为重要。下面我们将详细探讨.NET中的事务处理方式...

    ASP.NET事务处理

    ASP.NET事务处理是Web开发中一个关键的概念,它主要用于确保数据操作的一致性和完整性。在ASP.NET中,事务处理通常涉及到数据库操作,如插入、更新或删除数据,以确保这些操作要么全部成功,要么全部失败,防止数据...

    Ado.net事务

    然后,将`SqlCommand`对象的`Transaction`属性设置为这个事务实例,这样所有在该事务内的命令都将参与同一个事务。在尝试执行操作后,使用`Commit()`方法提交事务,或在出现错误时使用`Rollback()`方法回滚事务。 ...

    NHibernate事务、并发和缓存 电子书

    开发者可以在业务逻辑开始时调用 `ISession.BeginTransaction()` 来开启一个事务,并在所有操作完成后调用 `ITransaction.Commit()` 提交事务。如果发生异常,可以通过 `ITransaction.Rollback()` 回滚事务,撤销...

    Spring在Transaction事务传播行为种类

    ### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...

Global site tag (gtag.js) - Google Analytics