[英]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 ,但后一个名称有些误导,因为约束也在表上。
主要区别在于列约束语法较短,但不能用于所有约束:例如,如果您有一个包含两列的主键,则必须将其写入表约束语法中。
DDL 视图不显示外键
由未知第三方工具创建的 DDL 视图不是参数。
见小提琴。 两种情况下都存在外键。 此外,我没有看到两个 DDL 查询的结果差异。
附注。 作为建议 - 始终明确指定约束名称。 如果需要删除怎么办? 没有约束名称是有问题的......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.