【发布时间】:2010-10-14 03:01:03
【问题描述】:
如果我在同一个数据库的表 A 和表 B 中有一个主键(表 B 有它自己的主键),我将与表 A 中的主键创建一个关系,以便表 B 中的一列是外键键,这是否意味着在表 A 的主键列中创建的主键数据也将由于它是外键列而添加到表 B 中,还是我必须对这种关系进行编码,如果是,我该怎么做去吧?
【问题讨论】:
标签: sql-server foreign-keys primary-key
如果我在同一个数据库的表 A 和表 B 中有一个主键(表 B 有它自己的主键),我将与表 A 中的主键创建一个关系,以便表 B 中的一列是外键键,这是否意味着在表 A 的主键列中创建的主键数据也将由于它是外键列而添加到表 B 中,还是我必须对这种关系进行编码,如果是,我该怎么做去吧?
【问题讨论】:
标签: sql-server foreign-keys primary-key
回答您的问题:
...我必须编码吗 关系,如果是,我该怎么走 关于那个?
您需要定义两个表之间的关系。示例:
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
要在 tableB 中插入引用记录 2 的记录,您需要这样做:
INSERT INTO TableB (2,'My important information')
这假设 tableB 具有以下结构:
TableB
---------
Id --identity column/pk
tableAId --fk
SomeTextColumn
【讨论】:
你的问题:是不是表示在A表的主键列中创建的主键数据也会因为是外键列而被添加到B表中
不,外键不会将数据输入到其他表中。在表 B 中插入引用该外键的记录之前,您需要表 A 中的记录。
Q #2:或者我是否必须对这种关系进行编码,如果是这样,我该如何处理?
先插入表A,再插入表B。如果需要,可以在表A上放置一个触发器,以便在将数据输入表A时将记录插入表B...
【讨论】:
我不完全确定你在问什么,但是如果你想在表 A 中插入一条记录,在表 B 中插入一条相关记录,那么你必须将表 A 记录中的 id 指定为表 B 中的外键字段。
这是一个例子:表作者有字段id 和name。
INSERT author (id, name) VALUES (5, 'James Joyce')
现在表格簿有字段id、author_id 和title。
INSERT book (id, author_id, title) VALUES(99, 5, 'Ulysses')
如果作者的id 字段是自动生成的,那么您就不会在插入语句中指定它,而是使用@@IDENTITY property 检索其值。
【讨论】: