zoukankan      html  css  js  c++  java
  • 隐式事务(转)

    隐式事务模式,在这种模式中,SQL Server在没有事务存在的情况下会开始一个事务,但不会像在自动模式中那样自动执行COMMIT ROLLBACK 语句。隐式事务必须显式结束(既Commit 或者Rollback)。以下语句在没有事务时隐式开始一个事务。 

    ALTER TABLE

    GRANT

    FETCH

    DELETE

    CREATE

    REVOKE

    INSERT

    SELECT

    DROP

    OPEN

    UPDATE

    TRUNCATE TABLE

    Ø       使用隐式事务

    1.    启动SQL Server Management Studio并打开一个“新建查询”窗口。

    2.    键入并执行以下语句来设置连接为隐式事务模式(此例的代码包含在示例文件UsingImplicitTransactions.sql)

     SET IMPLICIT_TRANSACTIONS ON;

    GO 

    3.    执行以下代码创建一个表检验是否已启动事务:

    CREATE TABLE T1

         (i int PRIMARY KEY);

    4.    @@TRANCOUNT来测试是否已经打开一个事务。执行如下所示的SELECT语句:

    SELECT @@TRANCOUNT AS [Transaction Count];

    5.    结果是1,意思是当前连接已经打开了一个事务。0的意思是当前没有事务,一个大于1的数的意思是有嵌套事务(详见后文)

    6.    现在执行以下语句在表中插入一行并再次检查@@TRANCOUNT

    INSERT INTO T1 VALUES(5);

    GO

    SELECT @@TRANCOUNT AS [Transaction Count];

           @@TRANCOUNT的值仍然是1。由于已经有一个打开的事务,因此SQL Server没有开始一个新的事务。

    7.    这个时候必须提交或者回滚事务,不然等到会话结束,表仍然是锁住,因为事务没有提交。现在执行以下语句回滚这个事务并再次检查@@TRANCOUNT。可以看出,在ROLLBACK TRAN 语句执行之后,@@TRANCOUNT 的值变成了0

    ROLLBACK TRAN

    GO

    SELECT @@TRANCOUNT AS [Transaction Count];

    8.    尝试对表T1执行SELECT语句:

    SELECT * FROM T1;

    9.    由于表不复存在,所以会得到一个错误信息。这个隐式事务起始于CREATE TABLE语句,并且ROLLBACK TRAN语句取消了第一个语句后所做的所有工作。

    10.   执行以下代码关闭隐式事务:

    SET IMPLICIT_TRANSACTIONS OFF;

  • 相关阅读:
    复制延迟排查
    [学习笔记]贪心
    主从复制延时判断以及脚本
    [学习笔记]尺取法
    RESET MASTER 和RESET SLAVE 命令的使用方法 注意事项
    女神(goddess)——组合数学
    主从同步设置的重要参数log_slave_updates
    埃及分数&&The Rotation Game&&骑士精神——IDA*
    多源复制开关复制命令和监控
    万圣节后的早晨&&九数码游戏——双向广搜
  • 原文地址:https://www.cnblogs.com/qanholas/p/3287904.html
Copyright © 2011-2022 走看看