• 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

  • 相关阅读:
    【总结】进程和线程的区别
    为什么要求数据链路层帧的长度必须限制在一定范围内?
    常用正交表
    用正交表设计测试用例
    测试中的杀虫剂困境
    作品集-1:淘宝支付宝登陆框
    # 36氪开放日 • 杭州 • 11月10日 # 谈谈参会感受
    《在你身边,为你设计》读后感
    抱怨的背后
    更快的方式实现PHP数组去重
  • 原文地址:https://www.cnblogs.com/huyueping/p/5113004.html
Copyright © 2020-2023  润新知