SQL Server密钥和外键

时间:2010-10-13 18:36:19

标签: sql-server foreign-keys primary-key

如果我在同一个数据库的表A和表B中有一个主键(表B有自己的主键),我在表A中创建一个与主键的关系,这样表B中的一列就是外来的key,是否意味着在表A的主键列中创建的主键数据也将因为它是外键列而添加到表B中,或者我是否必须编写该关系,如果是,我该怎么做?那个?

3 个答案:

答案 0 :(得分:3)

回答你的问题:

  

...我必须编写代码   关系,如果是这样,我该如何去   关于那个?

您需要定义两个表之间的关系。例如:

ALTER TABLE tableB
ADD CONSTRAINT FK_tableB_TableA FOREIGN KEY (tableAId)
    REFERENCES tableA (id) ;

当您将记录插入tableB时,您仍然需要定义tableAId。 SQL Server并不神奇地知道它应该是什么。

假设tableA看起来像这样:

1 | Some text | 1/1/2020
2 | blah blah | 6/1/2021

要在引用记录2的tableB中插入记录,您需要执行以下操作:

INSERT INTO TableB (2,'My important information')

这假设tableB具有以下结构:

TableB
---------
Id --identity column/pk
tableAId --fk
SomeTextColumn

答案 1 :(得分:1)

你的问:这是否意味着在表A的主键列中创建的主键数据也将因为它是外键列而被添加到表B

不,foriegn键不会将数据输入其他表。在插入引用表B中的foriegn键的记录之前,您将需要表A中的记录。

问题2:或者我是否必须编写这种关系,如果是这样,我该如何处理呢?

插入表A,然后插入表B.当数据输入tableA时,可以将一个触发器放在TableA上以将记录插入TableB ...

答案 2 :(得分:0)

我不完全确定你要问的是什么,但如果你想将一条记录插入表A并将相关记录插入表B,那么你必须指定表A记录中的id作为值表B中的外键字段。

以下是一个示例:表格作者有字段idname

INSERT author (id, name) VALUES (5, 'James Joyce')

现在,表格包含字段idauthor_idtitle

INSERT book (id, author_id, title) VALUES(99, 5, 'Ulysses')

如果自动生成作者的id字段,则不会在insert语句中指定它,并且您将使用@@IDENTITY property检索其值。