2011-04-20 54 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