Ce qui est à l'origine de ce sqlite clé étrangère incompatibilité?
J'ai déjà vérifié cette question, et je pensais que j'avais la réponse - mais alors il ne regarde pas le droit de me.
J'ai le texte suivant réduits exemple:
CREATE TABLE pipelines (
name VARCHAR NOT NULL,
owner VARCHAR NOT NULL,
description VARCHAR,
PRIMARY KEY (name, owner),
FOREIGN KEY(owner) REFERENCES user (id)
);
CREATE TABLE tasks (
id INTEGER NOT NULL,
title VARCHAR,
pipeline VARCHAR,
owner VARCHAR,
PRIMARY KEY (id),
FOREIGN KEY(pipeline) REFERENCES pipelines (name),
FOREIGN KEY(owner) REFERENCES pipelines (owner)
);
CREATE TABLE user (
id VARCHAR NOT NULL,
name VARCHAR,
password VARCHAR,
PRIMARY KEY (id)
);
pragma foreign_keys=on;
insert into user values ('wayne', '', '');
insert into pipelines values ('pipey', 'wayne', '');
insert into tasks values (1, 'hello', 'pipey', 'wayne');
Lors de l'exécution de ce code, il écope:
$ sqlite3 foo.sq3 '.read mismatch.sql'
Error: near line 27: foreign key mismatch
Par le biais de la liste de la question que j'ai cité:
- la table parent (utilisateur) existe.
- le parent colonnes (nom, propriétaire) existent
- le parent colonnes sont, en fait, la clé primaire (j'ai pensé que peut-être été à l'origine)
- l'enfant tableau des références de toutes les colonnes de clé primaire de la table parent
Alors que dans le monde pourrait être à l'origine de cette erreur?
OriginalL'auteur Wayne Werner | 2013-09-20
Vous devez vous connecter pour publier un commentaire.
La la documentation dit:
Dans le
pipelines
table, ni lename
ni laowner
colonnes sont, par eux-mêmes, unique.Je suppose que vous voulez vraiment avoir un à deux colonnes de clé étrangère dans la
tasks
table:Merci beaucoup!!!
Cette réponse m'a aidé à voir qu'il me manquait une clé primaire.
OriginalL'auteur CL.