Sqlite:column_id REFERENCES parent(id) VS 外键(column_id) REFERENCES parent(id)

问题描述

我对 sqlITE 中的 FOREIGN KEYS 有一些疑问,因为有 2 个语法选项。

假设我们已经有了父表

CREATE TABLE parent (id,some_text)

我们可以使用两种方式创建带有外键的子表:

  1. CREATE TABLE child(id,some_child_data,parent_id REFERENCES parent(id))
  2. CREATE TABLE child(id,parent_id,FOREIGN KEY(parent_id) REFERENCES parent(id))

我的问题是:

  1. 这两种语法有什么区别吗?
  2. 我可以使用这些语法选项中的任何一个来使用 ON UPDATE / ON DELETE 修改吗?

解决方法

完全一样的东西。您可以使用列定义或在表创建结束时定义外键。结果是一样的。

但正如@Mike T 提到的:

两者之间的区别在于您仅限于单个 使用列定义时的列外键,在表中 定义级别,您可以拥有复合外键。

您可以在两种语法中使用 on update/ on delete 。

DB-小提琴:

父表:

 CREATE TABLE parent (id int,some_text varchar(50));

智利表:

 CREATE TABLE child(id,some_child_data,parent_id REFERENCES parent(id) ON UPDATE CASCADE);

 CREATE TABLE child(id,parent_id,FOREIGN KEY(parent_id) REFERENCES parent(id))

dbhere