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

nbu*_*urk 3 sql postgresql foreign-keys

我想知道这两个 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)
);
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE profiles (
    profile_id SERIAL PRIMARY KEY NOT NULL,
    bio TEXT,
    user_id INTEGER NOT NULL REFERENCES users(user_id) 
);
Run Code Online (Sandbox Code Playgroud)

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

创建表FOREIGN KEY

DDL 视图不显示FOREIGN KEY

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

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

Lau*_*lbe 6

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

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

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