“外键”和“约束外键”之间的区别

时间:2012-09-29 12:16:19

标签: sql

我的意思是例如我可以创建像

这样的表格
create table XTable
( 
  idt int not null primary key,
  value nvarchar(50),
  idq int,
  constraint fk_idq foreign key(idq) references YTable(idq)
)

我可以像这样创建它

create table XTable
(
  idt int not null primary key,
  value nvarchar(50),
  idq int,
  foreign key(idq) references YTable(idq)
)

我通常在第二个例子中创建表,但现在我对第一个例子感到好奇。有什么区别?

3 个答案:

答案 0 :(得分:13)

第一个为外键分配用户定义的名称,第二个将为外键分配系统生成的名称。

用户定义的外键名称可用于后续语句,如下所示:

ALTER TABLE XTable DROP    CONSTRAINT fk_idq;
ALTER TABLE XTable ENABLE  CONSTRAINT fk_idq;
ALTER TABLE XTable DISABLE CONSTRAINT fk_idq;

使用系统生成的名称更改约束更加困难,因为您必须首先发现这些名称。

答案 1 :(得分:12)

第一个选项纯粹是为了命名约束。

来自SQL FOREIGN KEY Constraint

要允许命名FOREIGN KEY约束,并在多列上定义FOREIGN KEY约束,请使用以下SQL语法

CREATE TABLE Orders
 (
 O_Id int NOT NULL,
 OrderNo int NOT NULL,
 P_Id int,
 PRIMARY KEY (O_Id),
 CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
 REFERENCES Persons(P_Id)
 )

另外,从CREATE TABLE (Transact-SQL)可以看出[ CONSTRAINT constraint_name ]是可选的。

答案 2 :(得分:3)

除了控制名称外,没什么。如果省略它,SQL Server将提供一个名称。仅供参考,您只需要这种语法(SQL Fiddle)

create table XTable
(
  idt int not null primary key,
  value nvarchar(50),
  idq int references YTable(idq)
)

这是fuller example