繁体   English   中英

使用 REFERENCES 时,可以在 PostgreSQL 中省略 FOREIGN KEY 吗?

[英]Can FOREIGN KEY be omitted in PostgreSQL when using REFERENCES?

我想知道这两个 SQL 语句之间是否有任何(可能是细微的)区别:

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL REFERENCES users(user_id) 
);

我注意到当我用第一个符号在 Postico 中创建一个表时,但稍后查看创建的profiles表的 DDL, FOREIGN KEY被删除,我最终得到较短的第二个符号。

使用FOREIGN KEY创建表

DDL 视图不显示FOREIGN KEY

所以,我想知道(并寻求确认)这两个语句实际上是 100% 等效的,或者它们对数据库的作用是否存在一些细微的差异。

任何指向官方资源的指针(也许还有它与 MySQL 的不同之处)将不胜感激。

您展示的两个示例执行相同的操作,只是使用了不同的语法。

第一种方法称为table 约束,第二个column constraint ,但后一个名称有些误导,因为约束也在表上。

主要区别在于列约束语法较短,但不能用于所有约束:例如,如果您有一个包含两列的主键,则必须将其写入表约束语法中。

在 PostgreSQL 中,您通过外键约束定义外键。 外键约束表示子表中的一列或一组列中的值与父表中的一列或一组列中的值匹配。 我们说外键约束维护子表和父表之间的参照完整性。

可能会更好地向您解释,或者您可以阅读有关外键的文档

DDL 视图不显示外键

由未知第三方工具创建的 DDL 视图不是参数。

小提琴 两种情况下都存在外键。 此外,我没有看到两个 DDL 查询的结果差异。

附注。 作为建议 - 始终明确指定约束名称。 如果需要删除怎么办? 没有约束名称是有问题的......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM