web-dev-qa-db-fra.com

Erreur d'échec de la contrainte UNIQUE SQLite3

J'essaie de créer une base de données qui permet aux utilisateurs de créer des listes de tâches et de les remplir avec des éléments à compléter. Cependant, lors de l'insertion de données dans les tables, cela me donne une erreur d'échec de contrainte UNIQUE et je ne sais pas comment la résoudre. Ceci est mon code pour créer la base de données et insérer des données.

CREATE TABLE user (
    user_id integer  NOT NULL   PRIMARY KEY,
    first_name varchar(15)  NOT NULL,
    title varchar(5)  NOT NULL,
    username varchar(15)  NOT NULL,
    password varchar(20)  NOT NULL,
    email varchar(50)  NOT NULL,
    bio text  NOT NULL
);


CREATE TABLE list (
    list_id integer  NOT NULL   PRIMARY KEY,
    list_name varchar(10)  NOT NULL,
    user_user_id integer  NOT NULL,
    FOREIGN KEY (user_user_id) REFERENCES user(user_id)
);


CREATE TABLE item (
    item_id integer  NOT NULL   PRIMARY KEY,
    item text  NOT NULL,
    completed boolean  NOT NULL,
    list_list_id integer  NOT NULL,
    FOREIGN KEY (list_list_id) REFERENCES list(list_id)
);


-- Data:
INSERT INTO user VALUES (1, "Name1", "Title1", "Username1", "Password1", "Email1", "Bio1");
INSERT INTO user VALUES (2, "Name2", "Title2", "Username2", "Password2", "Email2", "Bio2");
INSERT INTO user VALUES (3, "Name3", "Title3", "Username3", "Password3", "Email3", "Bio3");

INSERT INTO list VALUES (1, "user1-list1", 1);
INSERT INTO list VALUES (2, "user1-list2", 1);
INSERT INTO list VALUES (3, "user1-list3", 1);
INSERT INTO list VALUES (1, "user2-list1", 2);
INSERT INTO list VALUES (1, "user3-list1", 3);
INSERT INTO list VALUES (2, "user3-list2", 3);

INSERT INTO item VALUES (1, "user1-list1-item1", "FALSE", 1);
INSERT INTO item VALUES (2, "user1-list1-item2", "FALSE", 1);
INSERT INTO item VALUES (1, "user1-list2-item1", "FALSE", 2);
INSERT INTO item VALUES (1, "user1-list3-item1", "FALSE", 3);
INSERT INTO item VALUES (2, "user1-list3-item2", "FALSE", 3);
INSERT INTO item VALUES (1, "user2-list1-item1", "FALSE", 1);
INSERT INTO item VALUES (2, "user2-list1-item1", "FALSE", 1);
INSERT INTO item VALUES (1, "user3-list1-item1", "FALSE", 1);
INSERT INTO item VALUES (1, "user3-list3-item1", "FALSE", 2);

J'ai copié les erreurs que je reçois ci-dessous:

Error: near line 43: UNIQUE constraint failed: list.list_id
Error: near line 44: UNIQUE constraint failed: list.list_id
Error: near line 45: UNIQUE constraint failed: list.list_id
Error: near line 49: UNIQUE constraint failed: item.item_id
Error: near line 50: UNIQUE constraint failed: item.item_id
Error: near line 51: UNIQUE constraint failed: item.item_id
Error: near line 52: UNIQUE constraint failed: item.item_id
Error: near line 53: UNIQUE constraint failed: item.item_id
Error: near line 54: UNIQUE constraint failed: item.item_id
Error: near line 55: UNIQUE constraint failed: item.item_id

Toute aide serait appréciée!

10
LEJ

Vous avez défini list_id pour être la clé primaire de la table de liste, ce qui signifie que la valeur doit être unique pour chaque enregistrement. Essayer d'insérer plusieurs enregistrements avec la même table list_id est donc à l'origine de l'erreur.

Le problème est le même pour la table des éléments.

7
Dan O'Leary

Vous obtenez un UNIQUE constraint failed erreur lorsque les données que vous insérez ont une entrée qui se trouve déjà dans la colonne correspondante de la table dans laquelle vous insérez.

Si vous voulez que SQL IGNORE cette erreur et continue d'ajouter d'autres enregistrements, alors faites ceci:


INSERT or IGNORE into tablename VALUES (value1,value2 , so on );

Si vous souhaitez remplacer les valeurs du tablea chaque fois que l'entrée existe déjà, procédez comme suit:


INSERT or REPLACE into tablename VALUES (value1,value2 , so on );

Cela économise beaucoup de traitement de votre part et est très utile.

23
Natesh bhat