2012-02-24 3 views
21

J'ai deux tables, thème et quiz, voici leur définition:contrainte de clé étrangère ne fonctionne pas

CREATE TABLE "theme" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "nom" VARCHAR NOT NULL); 

CREATE TABLE quiz(

    id    INTEGER PRIMARY KEY, 
    nom   VARCHAR(256) NOT NULL, 
    theme  INTEGER NOT NULL, 
    niveau  INTEGER NOT NULL, 
    pass   INTEGER DEFAULT 1 NOT NULL, 
    jok   INTEGER DEFAULT 1 NOT NULL, 
    etat   INTEGER DEFAULT 0 NOT NULL, 
    FOREIGN KEY (theme) REFERENCES theme(id) 
); 

Le champ id (la clé primaire) dans le tableau thème est un Foreign Key dans le tableau quiz. Lorsque j'essaie d'insérer un enregistrement dans le tableau qui contient la valeur 30 par exemple comme clé étrangère, l'enregistrement est inséré avec succès dans la table quiz bien qu'il n'y ait aucun enregistrement dans la table de thème avec le id = 30, je veux dire, wasn n'est pas censé interdire cet insert puisque j'avais une contrainte de clé étrangère?

+0

Quelle version sqlite utilisez-vous? – TTT

Répondre

37

Êtes-vous sûr que foreign key support est activé?

En supposant que la bibliothèque est compilé avec les clés étrangères a permis, il doit encore être activé par l'application lors de l'exécution, en utilisant la commande FOREIGN_KEYS PRAGMA. Par exemple:

sqlite> PRAGMA foreign_keys = ON; 
+3

Vous m'avez sauvé, je devais l'activer: 'PRAGMA foreign_keys = ON;' – Luca

Questions connexes