34

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

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)
)

我通常像第二个例子一样创建表格,但现在我对第一个例子很好奇。有什么区别?

4

3 回答 3

20

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

用户定义的外键名称可用于以下语句:

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

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

于 2012-09-29T12:17:42.790 回答
18

第一个选项纯粹用于命名约束。

SQL FOREIGN KEY 约束

要允许命名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 ]是可选的。

于 2012-09-29T12:19:08.250 回答
5

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

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

这是一个更完整的例子

于 2012-09-29T12:19:26.643 回答