【问题标题】:Activate foreign key constraints error in dataGrip在dataGrip中激活外键约束错误
【发布时间】:2021-05-23 09:10:05
【问题描述】:

我正在使用 DataGrip 和 sqlite。 我有一张桌子 suppliers 和另一张名为 products 的桌子:

CREATE TABLE Suppliers (id INTEGER NOT NULL PRIMARY KEY,
nom TEXT,
siege_social TEXT);

CREATE TABLE Products (id INTEGER NOT NULL PRIMARY KEY,
nom TEXT,
prix REAL,
supplier INTEGER,
FOREIGN KEY (supplier) REFERENCES Suppliers(id)
);

我尝试PRAGMA foreign_keys = ON; 像我的老师一样激活外键约束。 但是,当我尝试在供应商表为空的情况下插入产品时,我没有收到任何错误:

INSERT INTO Products values (1, "Lunettes Cobra", 30, 1);

我期待这个:FOREIGN KEY constraint failed

你知道我怎样才能让它为此引发错误吗?

谢谢!

【问题讨论】:

  • 贴出你试过的代码。
  • @forpas 我添加了我使用的插入行,这是你想要的吗?
  • 没有。我的意思是打开 foreign_keys 并插入行的完整代码。
  • 好的,我重新创建了表格,得到了:[2021-05-23 12:02:26] [19] [SQLITE_CONSTRAINT_FOREIGNKEY] A foreign key constraint failed (FOREIGN KEY constraint failed)

标签: sql sqlite foreign-keys datagrip


【解决方案1】:

执行 pragma 语句只为当前会话启用该设置。控制台和编辑器在不同的会话中执行。

只需转到数据源设置的高级选项卡并将其设置在那里。它将应用于所有会话。

【讨论】:

    【解决方案2】:

    @forpas 要求提供整个代码,因此我删除了所有现有表并使用了此代码:

    PRAGMA foreign_keys = ON;
    
    CREATE TABLE Suppliers (id INTEGER NOT NULL PRIMARY KEY,
    nom TEXT,
    siege_social TEXT);
    
    CREATE TABLE Products (id INTEGER NOT NULL PRIMARY KEY,
    nom TEXT,
    prix REAL,
    supplier INTEGER,
    FOREIGN KEY (supplier) REFERENCES Suppliers(id)
    );
    INSERT INTO Products values (2, "Lunettes Cobra", 30, 1);
    

    一切都按预期进行。

    [2021-05-23 12:02:26] [19] [SQLITE_CONSTRAINT_FOREIGNKEY]  A foreign key constraint failed (FOREIGN KEY constraint failed)
    

    @forpas 再次正确,我在激活foreign_keys 之前创建表的事实不是问题。我使用了 2 个控制台,一个用于创建表格,另一个用于插入值。我只在第一个中激活了foreign_keys。我以为它是在数据库中激活的,但它与控制台相关。

    【讨论】:

    • 在建表之后开启foreign_keys,只要在插入新行之前,在同一个事务中开启就没有问题。
    • 是的,你是对的,我在控制台中打开了 foreign_keys 并从另一个控制台插入行
    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2023-03-13
    • 2015-04-03
    • 2018-02-19
    相关资源
    最近更新 更多