2009-09-25 90 views
4

我在Management Studio中使用BEGIN TRANSACTION開始了一項交易,但我忘記了ROLLBACK或COMMIT約10分鐘。我嚇壞了,回到了ROLLBACK我的改變。這是否回滾了那段時間內通過服務器或通過我的用戶/連接進行的所有查詢?交易是否影響所有查詢?

回答

4

只要您連接:-)

(編輯:而你的交易,因爲BEGIN TRANSACTION如果你沒有更新之前在同一個會話的BEGIN TRANSACTION,他們當然不會被回滾。)

但是:它可能已經給出了錯誤的答案取決於什麼鎖類型及查詢提示其他會議分別正在使用中選擇...

一個例子:

在一個SQL Studio的會話,請執行下列操作:

CREATE TABLE a(a INT) 

INSERT INTO a VALUES(1) 

BEGIN TRANSACTION 

UPDATE a 
SET a = 2 

SELECT *, @@TRANCOUNT 
FROM a 

- >你會看到 '2,1' 作爲結果

打開一個新的會話(在SQL工作室標籤)

務必:

SELECT *, @@TRANCOUNT 
FROM a (NOLOCK) 

你會看到「 2,0'

現在,在第一次會議中,做

ROLLBACK TRANSACTION 

SELECT *, @@TRANCOUNT 
FROM a 

- >事務回滾,你看 '1,0'

- >在第二屆一個選擇也將顯示 '1,0'

這樣:如果你使用(NOLOCK)提示,你可以得到未提交的數據結果 - >這可能會導致非常意想不到的效果:-)

不要忘記:

DROP TABLE a 

時,即可大功告成;)

3

它只應該影響你的交易,所以只有在你的會話期間完成的事情。

+1

你也許已經鎖定其他用戶,你就太做了一個變化表。 – 2009-09-25 17:52:22

+0

我想我確實鎖定了表中的所有人。 – 2009-09-25 17:55:39

1

你很好。所有其他查詢都會順利完成。

0

您需要查看交易的ACID屬性。您看到,如果交易回滾或承諾交易對其他交易的結果沒有影響,則無需擔心。

1

它應該回滾事務中所做的所有查詢,所以它比用戶\連接更具體,並且絕對不是盒子上的所有查詢。

0

您的回滾隻影響您的交易。我在ACID。

但是,您鎖定的行,頁面或整個表會影響其他用戶,如果他們想要使用它們。這取決於:

  • 他們想要做什麼
  • 鎖定超時
  • 客戶端命令超時