【问题标题】:SQLite3 foreign key validated incorrectly [duplicate]SQLite3外键验证不正确[重复]
【发布时间】:2014-12-13 09:19:06
【问题描述】:

如果我启用外键验证,我将无法插入符合我的外键定义的正确值。我在这里错过了什么?

$ sqlite3 test.db
sqlite> CREATE TABLE a (id INTEGER NOT NULL, item TEXT NOT NULL);
sqlite> CREATE TABLE b (id INTEGER NOT NULL, item TEXT NOT NULL,
                        ref INTEGER REFERENCES a (id));
sqlite> INSERT INTO a VALUES (16, 'test');
sqlite> PRAGMA foreign_keys = 1;
sqlite> INSERT INTO b VALUES (16, 'test2', 16);
Error: foreign key mismatch - "b" referencing "a"
sqlite> SELECT * FROM a;
16|test

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    我用谷歌搜索发现this answer to a previous question,它引用了documentation

    通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受制于 UNIQUE 约束或具有 UNIQUE 索引。

    当您向 a.id 列添加 UNIQUE 约束时,该示例有效:

    $ sqlite3
    sqlite> CREATE TABLE a (id INTEGER UNIQUE NOT NULL, item TEXT NOT NULL);
    sqlite> CREATE TABLE b (id INTEGER NOT NULL, item TEXT NOT NULL,
       ...>   ref INTEGER REFERENCES a(id));
    sqlite> INSERT INTO a VALUES (16, 'test');
    sqlite> INSERT INTO b VALUES (16, 'test2', 16);
    sqlite> SELECT * FROM a;
    16|test
    sqlite> SELECT * FROM b;
    16|test2|16
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多