sub*_*ash 4 sql-server unique-constraint
如何添加sql表的唯一约束作为sql server 2005中另一个sql表的外键引用
为了添加FK约束(在子表中添加到父表),您必须向关系的父表列添加唯一约束.
所有其余的都是可选的或与FK无关:
父表(在这种FK关系中)经常被称为(包括SSMS)作为主键表,但PK不是必须的,父表中的唯一键/约束就足够了(因为PK是唯一的,它是唯一约束的特殊情况)父表).
从Matt的回答中删除TableA和TableB ,这对初学者来说很困惑,
并将它们重新创建为
CREATE TABLE parentB--TableB
(
PK1 INT NOT NULL,
PK2 INT NOT NULL,
--I would not have additional non-referenced data in parent table,
--rather in child table
--SomeData VARCHAR(1000),
--CONSTRAINT PK_TableB PRIMARY KEY CLUSTERED (PK1, PK2)
)
CREATE TABLE childA--TableA
(
--PK INT, -- NOT NULL,
FK1 INT-- NOT NULL, -- Or NULL, if you''d rather.
FK2 INT --NOT NULL --,
, SomeData VARCHAR(1000)
--CONSTRAINT PK_TableA PRIMARY KEY CLUSTERED (PK),
--CONSTRAINT FK_TableA_FK1FK2 FOREIGN KEY (FK1, FK2) REFERENCES TableB (PK1, PK2),
--CONSTRAINT Cons2cols UNIQUE(FK1, FK2)
)
Run Code Online (Sandbox Code Playgroud)
现在,按顺序,添加FK
ALTER TABLE childA
ADD
--constraint FK1_childA
--this is optional, if one needs to add his own custom name
FOREIGN KEY (FK1) REFERENCES parentB(PK1);
Run Code Online (Sandbox Code Playgroud)
您应该首先在父表列中的相应引用列上创建唯一约束:
ALTER TABLE parentB ADD
--CONSTRAINT YourUniqueName --uncomment for adding your own name to constraint
UNIQUE(PK1)
Run Code Online (Sandbox Code Playgroud)
类似地,对于2列外键约束
(首先,在父表中需要相应的唯一约束):
ALTER TABLE parentB ADD
--CONSTRAINT YourUniqueName --for adding your own name to unique constraint
UNIQUE(PK1,PK2)
ALTER TABLE childA
ADD
--constraint yourUniqueName --uncomment for adding your own name to FK constraint
FOREIGN KEY (FK1, FK2) REFERENCES parentB(PK1, PK2);
Run Code Online (Sandbox Code Playgroud)
您需要记住,在列上添加 FK 不会自动在该列上放置索引。您需要分两步完成此操作。
1) Make a column in your table a FK to a parent table.
2) Add a unique constraint on that same column
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29301 次 |
| 最近记录: |