在使用引用时,PostgreSQL中是否可以省略外键?

在使用引用时,PostgreSQL中是否可以省略外键?,sql,postgresql,foreign-keys,Sql,Postgresql,Foreign Keys,我想知道这两条SQL语句之间是否有任何(可能是细微的)区别: 创建表格配置文件( 配置文件id串行主键不为空, 生物文本, 用户id整数不为空, 外键(用户id)引用用户(用户id) ); 及 创建表格配置文件( 配置文件id串行主键不为空, 生物文本, 用户id整数非空引用用户(用户id) ); 我注意到,当我在Postco中使用第一个符号创建一个表时,但稍后再查看所创建的配置文件表的DDL时,外键会被删除,最后我使用了较短的第二个符号 使用外键创建表: DDL视图不显示外键: 因此,

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

创建表格配置文件(
配置文件id串行主键不为空,
生物文本,
用户id整数不为空,
外键(用户id)引用用户(用户id)
);

创建表格配置文件(
配置文件id串行主键不为空,
生物文本,
用户id整数非空引用用户(用户id)
);
我注意到,当我在Postco中使用第一个符号创建一个表时,但稍后再查看所创建的
配置文件
表的DDL时,
外键
会被删除,最后我使用了较短的第二个符号

使用
外键创建表

DDL视图不显示
外键

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


任何指向官方资源的指针(以及它与MySQL的不同之处)都将受到欢迎。

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

可能会更好地向您解释,或者您可以阅读

DDL视图不显示外键

由未知的第三方工具在非参数中创建的DDL视图

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


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

您显示的两个示例做相同的事情,只是语法不同

第一个方法称为表约束,第二个列约束,但后一个名称有些误导,因为约束也在表上

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