1

我不太熟悉,SQL请解释一下以下两者的区别以及最好的使用方式。使用一个比另一个有什么优势。

CREATE TABLE Employee
(
    Emp_Id int NOT NULL,
    Dep_Id int NOT NULL,
    ...
    FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)
);

CREATE TABLE Employee
(
    Emp_Id int NOT NULL,
    Dep_Id int NOT NULL,
    ...

    CONSTRAINT fk_EmpDept FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)
);
4

4 回答 4

1

我总是为我的键和约束命名,通常有足够的信息,任何查看键名的人都能够理解键的作用

  • 我命名的外键FK_FieldName@TableName
  • 我命名的主键PKC_TableNamePKN_TableName(“c”表示“clustered”,“n”表示“nonclustered”,尽管这并不重要)。
  • 对于索引,我根据它们的唯一性、聚集性和索引的“I”来命名它们,例如UNI_FieldName@TableName.

命名的原因是为了方便,如果您需要删除对象,更重要的是,如果您的代码中的某些内容试图违反关系/约束。如果您收到一条消息说您违反了密钥,FK_FieldName@TableName但如果名称没有意义,则不太清楚问题出在哪里。

于 2013-03-12T19:38:01.920 回答
0

唯一的区别在于命名。如果您没有为约束明确设置名称,它将具有自动生成的名称。例如:FK_ Employee _Dep_Id__164452B1。你会在表键的描述中看到这个名字,在不同的例外等等。

于 2013-03-12T19:29:13.193 回答
0

如果您不命名外键,则数据库会为该字段隐式分配外键名称。

如果您命名外键,则数据库将其用作外键常量名称。

您可以drop FOREIGN KEY foreign_key_name用于删除约束(对于 MySql)。

您可以drop constraint foreign_key_name用于删除约束(对于 Oracle、MS Sql 等)。

您可以使用

ALTER TABLE TableName
ADD CONSTRAINT foreign_key_name
FOREIGN KEY (field)
REFERENCES foreign_key_table(Foreign_key_field)
于 2013-03-12T19:30:21.037 回答
0

第一个例子 withFOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)用在 MySQL 中,它不允许你给这个约束指定名称。

在第二个示例中,CONSTRAINT fk_EmpDept FOREIGN KEY (Dep_Id) REFERENCES Department(Dep_Id)您基本上可以更改fk_EmpDept为您想要的任何名称。它可用于 MySQL、SQL Server、Oracle、MS Access。

使用第二个版本,您还可以在多个列上创建外键约束。

于 2013-03-12T19:30:53.607 回答