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 的不同之处)将不胜感激。
您展示的两个示例执行相同的操作,只是语法不同。
第一个方法称为表约束,第二个称为列约束,但后一个名称有点误导,因为约束也在表上。
主要区别在于列约束语法更短,但不能用于所有约束:例如,如果您有一个包含两列的主键,则必须将其编写为表约束语法。