【问题标题】:Sqlite: column_id REFERENCES parent(id) VS foreign key (column_id) REFERENCES parent(id)Sqlite:column_id REFERENCES parent(id) VS 外键 (column_id) REFERENCES parent(id)
【发布时间】:2021-05-30 05:34:56
【问题描述】:

我对 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, some_child_data, parent_id, FOREIGN KEY(parent_id) REFERENCES parent(id))

我的问题是:

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

【问题讨论】:

    标签: sql sqlite foreign-keys


    【解决方案1】:

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

    但正如@Mike T 所说:

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

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

    DB-Fiddle:

    父表:

     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, some_child_data, parent_id, FOREIGN KEY(parent_id) REFERENCES parent(id))
    

    dbhere

    【讨论】:

    • 两者的不同之处在于,在使用列定义时,您只能使用单列外键,而在表定义级别,您可以拥有复合外键。
    • 你是绝对正确的。根据您的意见修改了我的答案。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2012-11-12
    • 2014-02-28
    相关资源
    最近更新 更多