我的意思是例如我可以创建表格
create table XTable
(
idt int not null primary key,
value nvarchar(50),
idq int,
constraint fk_idq foreign key(idq) references YTable(idq)
)
Run Code Online (Sandbox Code Playgroud)
我可以像这样创造它
create table XTable
(
idt int not null primary key,
value nvarchar(50),
idq int,
foreign key(idq) references YTable(idq)
)
Run Code Online (Sandbox Code Playgroud)
我通常在第二个例子中创建表格,但现在我对第一个例子感到好奇.有什么不同?
Luk*_*der 15
第一个为外键分配用户定义的名称,第二个将为外键分配系统生成的名称.
用户定义的外键名称可用于后续语句,如下所示:
ALTER TABLE XTable DROP CONSTRAINT fk_idq;
ALTER TABLE XTable ENABLE CONSTRAINT fk_idq;
ALTER TABLE XTable DISABLE CONSTRAINT fk_idq;
Run Code Online (Sandbox Code Playgroud)
使用系统生成的名称更改约束更加困难,因为您必须首先发现这些名称.
Adr*_*der 15
第一个选项纯粹是为了命名约束.
要允许命名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)
)
Run Code Online (Sandbox Code Playgroud)
此外,从CREATE TABLE(Transact-SQL)可以看出这[ CONSTRAINT constraint_name ]
是可选的.
除了控制名字之外,什么都没有。如果省略,SQL Server 将提供一个名称。仅供参考,你只需要这个语法(SQL Fiddle):
create table XTable
(
idt int not null primary key,
value nvarchar(50),
idq int references YTable(idq)
)
Run Code Online (Sandbox Code Playgroud)
这是一个更完整的例子。
归档时间: |
|
查看次数: |
12412 次 |
最近记录: |