0

那里!我在 sqlite3 中有一个失败的外键约束,我真的不知道为什么。我正在使用此处描述的复合外键(http://www.sqlite.org/foreignkeys.html#fk_composite)和“普通”外键。

这是我的模式:

sqlite> .schema sources
CREATE TABLE sources(
    source_id VARCHAR(16) NOT NULL,
    source_type INTEGER NOT NULL,
    title VARCHAR(128) NOT NULL,
    year INTEGER,
    month INTEGER,
    PRIMARY KEY(source_id),
    UNIQUE(title)
);
sqlite> .schema author_aliases
CREATE TABLE author_aliases(
    author_id INTEGER NOT NULL,
    alias_id INTEGER NOT NULL,
    forenames VARCHAR(128),
    surname VARCHAR(128) NOT NULL,
    PRIMARY KEY(author_id, alias_id),
    FOREIGN KEY(author_id) REFERENCES authors(author_id),
    UNIQUE(forenames, surname)
);
sqlite> .schema alias_source_relations
CREATE TABLE alias_source_relations(
    source_id VARCHAR(16) NOT NULL,
    author_id INTEGER NOT NULL,
    alias_id INTEGER NOT NULL,
    PRIMARY KEY(source_id, author_id, alias_id),
    FOREIGN KEY(source_id) REFERENCES sources(source_id),
    FOREIGN KEY(author_id, alias_id) REFERENCES author_aliases(author_id, alias_id)
);

这是外键所指的数据:

sqlite> SELECT * FROM sources WHERE source_id='Allen1980';
Allen1980|0|The definition of electronegativity and the chemistry of the noble gases|1980|
sqlite> SELECT * FROM author_aliases WHERE author_id=1 and alias_id=1;
1|1|Leland C.|Allen
sqlite> SELECT * FROM authors WHERE author_id=1;
1|Leland Cullen|Allen

这是我的插入:

sqlite> INSERT INTO alias_source_relations VALUES(1, 1, 'Allen1980');
Error: foreign key constraint failed

有谁知道我错过了什么?谢谢你的帮助!

问候,玛丽安

4

2 回答 2

5

检查列顺序!

INSERT INTO alias_source_relations VALUES('Allen1980', 1, 1);
于 2013-10-29T11:06:55.863 回答
4

插入值的顺序与表架构中定义的列顺序不匹配。

包含列名更安全,也更具描述性。像这样,顺序不需要匹配表模式中的一个,并且不知道表模式的人仍然理解命令:

INSERT INTO alias_source_relations (source_id, author_id, alias_id)
    VALUES ('Allen1980', 1, 1);
于 2014-09-26T16:31:17.677 回答