sql - 这些 SQL 语法有什么区别?

标签 sql foreign-keys create-table

我正在寻找有关外键的信息......再次! ...并且碰巧在 webschools.com 上注意到他们对同一件事有不同的例子。对于外键示例,他们有

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

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

现在......

有什么区别?...

我如何知道我的数据库应该使用哪一个?我有一种感觉,这将有助于解决我在 SQL 方面遇到的很多困惑...

最佳答案

效果没有区别:它们实现了完全相同的效果。

我更喜欢内联版本,因为它使 fk 定义尽可能接近列定义。

还有第三种方法 - 单独的 alter table 语句(我认为这是“官方”方法):

alter table orders
add contraint fk_PerOrders 
foreign key p_id references persons(p_id);

您可能会发现某些数据库不支持其中一个版本。

关于sql - 这些 SQL 语法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696331/

相关文章:

MySQL 查询 : Selecting rows of linked tables and catching a "bigger" dataset

mysql - #1067 - 'bonusid' 的默认值无效我该如何修复此错误?

mysql - 两个外键引用一个表和可为空的外键

sql - 查询以查明外键是否在数据库中的其他位置被引用

mysql - 试图删除包含外键的列并收到错误消息

SQL语句-更新两个表

sql - AWS MS SQL 创建表

sql - 查找行组的最大值 POSTGRESQL

PHP 从两个表中选择并回显表名

java - Android:如何从 sqlite 数据库检索数据