首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对外键约束的困惑

问对外键约束的困惑
EN

Stack Overflow用户
提问于 2017-10-22 03:24:57
回答 2查看 832关注 0票数 1

我有一个关于约束的一般性问题。下面的例子有什么区别?

代码语言:javascript
复制
CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-22 04:20:07

没有逻辑上的区别。

标准SQL支持两种形式的声明约束:在列级别,如第一个示例,在表级别,在第二个示例中。

如果主键或外键涉及多个列,则需要表级约束语法。

MySQL支持主键的列级和表级语法.但是,如果随后运行SHOW CREATE TABLE Orders,您将看到MySQL将其报告回表,就好像它被声明为表级约束一样。

MySQL只支持外键的表级语法.

它一直是支持列级外键语法的长期特性请求,但到目前为止还没有实现。https://bugs.mysql.com/bug.php?id=4919

票数 1
EN

Stack Overflow用户

发布于 2017-10-22 04:19:59

在第一个示例中,数据库将隐式地命名约束。

在第二个示例中,create语句显式地设置外键约束的名称。(主键也应该命名,但在本例中不存在)

作为最佳实践,您应该始终给出约束的有意义的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46870188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档