sql事务

  事务是一组数据单元操作的集合,这个集合是一个不可分割的逻辑单元,不是全部执行就是通通不执行。

组成事务的数据库单元只有两种:读取和写入。

T-SQL语言的事务是由BEGIN TRAN命令语句开始,一直执行到COMMIN TRAN提交事务或ROLLBACK TRAN回滚事务为止。期间使用@@ERROR系统函数检查数据库单元操作是否成功。

 

事务的四大特性(简称ACID):

1,原子性(Atomicity):将事务过程的所有数据库单元操作视为同一项工作,不是全部执行完,就是通通不执行,将它视为一个不可分割的逻辑单元。

2,一致性(Consistency):当事务更改或更新数据库的数据后,在事务之前和之后,数据库的数据仍然需要满足完整性限制条件,维持数据的唯一性。

3,隔离性(Isolation):当执行多个事务时,虽然事务是并发执行,不过,事务之间应该满足独立性。也就是说,一个事务不会影响到其它事务的执行结果或被其它事务所干扰。

4,永久性(Durability):当事务完成执行事务提交后,其执行操作所更动的数据已经永久改变,数据库管理系统不只需要将数据从数据库缓冲区实际写入存储装置,而且不会因任何错误,导致数据的流失。

 

一般情况下,事务放在存储过程里使用,如下例子:

CREATE PROCEDURE Tran_NewsKPI
@NewsID int = 0
AS

BEGIN TRAN Tran_Click
declare @tran_error int;--标记执行事务时的错误个数
DECLARE @clicknum int;
SET @clicknum =
(SELECT ISNULL(click, 0) AS Expr1
FROM T_News
WHERE (id = @NewsID));
set @tran_error = 0;

if(@clicknum = 0)
begin
UPDATE T_News SET click = 0 WHERE (id = @NewsID);
set @tran_error = @tran_error + @@ERROR;
end

UPDATE T_News SET click = click + 1 WHERE (id = @NewsID);
set @tran_error = @tran_error + @@ERROR;

if(@tran_error > 0)
 begin
 --出错,事务回滚
  rollback tran;
 select 0;
 end
else
 begin

  commit tran;--执行成功,提交事务

  select 1;
 end

 

posted @ 2016-01-08 13:55  追你追到  阅读(192)  评论(0编辑  收藏  举报