欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQL 事务与并发

程序员文章站 2022-05-31 18:38:40
...

a) 应用程序事务与数据库存储引擎事务 b) 应用程序处理并发与数据库存储引擎处理并发 为什么要从两个方向来考虑呢,是有原因的,首先机制处理方式,以及在软件中的所处的环境以及情节都不同。所以我们可以将事务与并发分为两个部分来讲,这文主要讲MSSQL的事

a) 应用程序事务与数据库存储引擎事务

b) 应用程序处理并发与数据库存储引擎处理并发

为什么要从两个方向来考虑呢,是有原因的,首先机制处理方式,以及在软件中的所处的环境以及情节都不同。所以我们可以将事务与并发分为两个部分来讲,这文主要讲MSSQL的事务,我会在接下来的文章谈谈java或者C#处理事务以及结合Martin Fowler说到的并发架构模式探讨。

什么是事务呢?

引言:
假设小强有两张银行卡A和B,卡A内有1000元存款。一天,小强来到银行,打算将卡A中的200元转账到卡B中。当工作人员刚打卡A中的金额减少200元时,银行突然停电了(这种情况并不多见,香港服务器,我们假设银行也没有备用电源)。那么,恢复供电后,小强查询卡A的金额,会出现怎样的情况?

答案是肯定的,还是1000元。这是因为卡B并没有增加200元。但明明工作人员已经将卡A减少了200元,为何还有1000元呢?这就是事务技术的神奇之处。

所谓事务,指的是一个单元的工作。这个单元中可能包括很多工作步骤,服务器空间,它们要么全做,要么全不做。数据库中执行的操作都是以事务为单元进行的。例如,小强将卡A的钱转到卡B,包括两个步骤:从卡A中减少200元和将卡B增加200元,这就是一个事务。如果只做了第一步,未做第二步,则第一步操作也会被撤销。

MSDN给出的定义:事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。

事务执行模式

1.自动提交事务(SQL Server默认的事务执行模式)

2.显示事务(begin transaction,commit,rollback)

事务以begin transaction 开始,以commit(提交)或rollback(发生故障时,回滚)结束

例1:假设在选修表中,美国服务器,学号'1002'的学生由于某些原因不选1号课程而改选4号课程,并且该课程的考试成绩为80分。

如果我们将这两个步骤定义为一个事务的话,代码如下:

begin transaction update 选修 学号=and 课程号= go update 选修 and 课程号= commit select * from 选修

相关标签: 事务 并发