我有一个关于约束的一般性问题。下面的例子有什么区别?
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)
);谢谢!
发布于 2017-10-22 04:20:07
没有逻辑上的区别。
标准SQL支持两种形式的声明约束:在列级别,如第一个示例,在表级别,在第二个示例中。
如果主键或外键涉及多个列,则需要表级约束语法。
MySQL支持主键的列级和表级语法.但是,如果随后运行SHOW CREATE TABLE Orders,您将看到MySQL将其报告回表,就好像它被声明为表级约束一样。
MySQL只支持外键的表级语法.
它一直是支持列级外键语法的长期特性请求,但到目前为止还没有实现。https://bugs.mysql.com/bug.php?id=4919
发布于 2017-10-22 04:19:59
在第一个示例中,数据库将隐式地命名约束。
在第二个示例中,create语句显式地设置外键约束的名称。(主键也应该命名,但在本例中不存在)
作为最佳实践,您应该始终给出约束的有意义的名称。
https://stackoverflow.com/questions/46870188
复制相似问题