在 SQL 服务器上使用或不使用 CONSTRAINT 关键字的区别
Difference between using or not using CONSTRAINT keyword on SQL Server
在 SQL 服务器上使用外键时使用或不使用 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)
);
两者都不让我向 table 添加记录,除非 ClientID
已经存在于 Clients
table 中,并且相同的 ClientID
ClientPhone
还没有出现在 ClientsPhones
table.
除了我能够命名约束之外,两者之间还有什么真正的区别吗?
如果你不创建约束。它会自动创建自己的约束名称
外键索引名称是使用引用外键列的名称自动生成的。
所以无法看出使用和不使用约束关键字的区别。默认情况下将定义约束名称。
我做了一些研究,但不相信地狱男孩的回答尽可能清楚,并且有一些错误信息。
您添加到数据库的每个约束都有一个默认设置的名称。这包括 PRIMARY KEY
、FOREIGN KEY
、DEFAULT
、NOT NULL
。它不一定是所用列的名称。
您可以想象当您不使用 CONSTRAINT
关键字时 SQL 服务器将它放在那里并为您生成一个名称。
如果要删除或更改约束,则必须删除整个 table 并使用正确的约束重新创建它,或者您可以按名称引用约束,然后像更改列一样更改它使用 ALTER
关键字。当您需要使用外键删除 table 时,这会很有用。如果您命名外键约束,您可以删除它,然后 table 而不是必须删除外键指向的 table。
在 SQL 服务器上使用外键时使用或不使用 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)
);
两者都不让我向 table 添加记录,除非 ClientID
已经存在于 Clients
table 中,并且相同的 ClientID
ClientPhone
还没有出现在 ClientsPhones
table.
除了我能够命名约束之外,两者之间还有什么真正的区别吗?
如果你不创建约束。它会自动创建自己的约束名称
外键索引名称是使用引用外键列的名称自动生成的。
所以无法看出使用和不使用约束关键字的区别。默认情况下将定义约束名称。
我做了一些研究,但不相信地狱男孩的回答尽可能清楚,并且有一些错误信息。
您添加到数据库的每个约束都有一个默认设置的名称。这包括 PRIMARY KEY
、FOREIGN KEY
、DEFAULT
、NOT NULL
。它不一定是所用列的名称。
您可以想象当您不使用 CONSTRAINT
关键字时 SQL 服务器将它放在那里并为您生成一个名称。
如果要删除或更改约束,则必须删除整个 table 并使用正确的约束重新创建它,或者您可以按名称引用约束,然后像更改列一样更改它使用 ALTER
关键字。当您需要使用外键删除 table 时,这会很有用。如果您命名外键约束,您可以删除它,然后 table 而不是必须删除外键指向的 table。