2011-04-20 39 views
2

我不知道是否會鎖定表的事務也會鎖定所有其他鏈接表?事務鎖是否鏈接表?

實施例:

表1:

userId | ready 
-------------- 
    3 | 1 
    1 | 0 
    ... | ... 

表2:

id | name 
---------- 
0 | John 
1 | 0 
n | ... 

表1有一個外鍵表2

表2的ID是一個PKEY 。

如果我在一個事務中更新表1,它會鎖定表2嗎?

如果我在事務中更新表2,它會鎖定表1嗎?

[編輯]

更多信息: 鎖升級:表 用戶id是一個外鍵ID鏈接。

我希望這是足夠的信息。

+0

這取決於你如何做你的事務,如何設置表/外鍵,如果數據庫支持行級鎖定或只有表級別等...沒有任何細節的數據庫服務器,表類型,以及您正在運行什麼類型的查詢,無法說明。 – 2011-04-20 14:33:21

回答

2

在四大( OracleSQL ServerPostgreSQLMySQL)更新到一個鏈接表會鎖定另一個表

是的,它可以鎖定表,請參閱@a_horse_with_no_name的評論既不數據庫。此外,如果您的參考約束被定義爲CASCADE或​​,那麼對主表的更新將觸發子表上的更新,這當然也會鎖定子表。

+1

這並非完全正確。在Oracle中,當FK列未編制索引時,在更新(或刪除)父表時,子表**被**鎖定。有關詳細信息,請參閱手冊的本章:http://download.oracle.com/docs/cd/B14117_01/server.101/b10743/data_int.htm#sthref3094 – 2011-04-20 15:01:05

+0

@a_horse_with_no_name:好的一點。請將其作爲回答發佈,我會讓@op接受你的回覆。 – Quassnoi 2011-04-20 15:03:21

+0

如果OP不使用Oracle,則無關緊要。而且他沒有告訴我們哪個DBMS正在使用。 – 2011-04-20 15:06:48