在SQL Server中使用或不使用CONSTRAINT
关键字处理外键有什么区别?
我注意到在这种特定情况下,似乎两者都可以不使用CONSTRAINT
关键字来工作:
CREATE TABLE ClientsPhones
(
ClientPhone varchar(10) NOT NULL,
ClientID smallint NOT NULL,
PRIMARY KEY (ClientPhone),
FOREIGN KEY (ClientID) REFERENCES Clients(ClientID)
);
使用CONSTRAINT
关键字:
CREATE TABLE ClientsPhones
(
ClientPhone varchar(10) NOT NULL,
ClientID smallint NOT NULL,
PRIMARY KEY (ClientPhone),
CONSTRAINT fk_ClientID
FOREIGN KEY (ClientID) REFERENCES Clients(ClientID)
);
除非Clients
表中已存在ClientID
,且ClientsPhones
表中不存在相同的ClientID
和ClientPhone
,否则两者都不允许我向表中添加记录。
除了我能够命名约束这一事实之外,它们之间是否有任何真正的区别?
CONSTRAINT fk_ClientID
,则您可以为约束命名 - 您可以选择适合您的命名规则。否则,如果省略该子句,则 SQL Server 将为您选择约束的名称 - 这个名称不容易理解,也不是显而易见的。始终自己为约束命名!另外也要为主键约束命名! - marc_sconstraint
可以为外键约束指定特定名称。如果选择得当,这可以使错误消息更易于理解。 - Gordon Linoff