SQLite3唯一性约束失败错误

40

我正在尝试创建一个允许用户创建“待办事项”清单并填写完成项目的数据库。但是,当向表中插入数据时,它会给出一个“UNIQUE constraint failed”错误,我不知道如何解决。以下是我的创建数据库和插入数据的代码。

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);

我将下面收到的错误复制如下:

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

任何帮助都将不胜感激!

2个回答

82

当你插入的数据在相应的列中已经有一个条目时,会出现“唯一约束失败(UNIQUE constraint failed)”错误。

如果你想让 SQL 忽略该错误并继续添加其他记录,那么请执行以下操作:


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

如果您想在表中的条目已经存在时替换值,则可以这样做:


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

这可以在你的端上节省大量处理时间,非常有用。


我也尝试过使用“INSERT or IGNORE”,但是我遇到的问题是重复值的新记录根本没有被添加。可能出了什么问题? - mukhtar alam
如果这个错误是意外的,该怎么办?你如何看出哪些数据引起了错误? - Daniel Kaplan

29
您已将list_id设置为列表表上的主键,这意味着每个记录的值必须是唯一的。因此,尝试插入具有相同list_id表的多个记录会导致错误。
item表也存在同样的问题。

2
那么在每个表中,我应该使用什么作为主键呢? - LEJ
1
通常情况下,主键是由SQL自动生成的。要创建一个自动递增的主键,只需在PRIMARY KEY后添加AUTOINCREMENT即可。然后您就不需要为键实际指定一个值(即仅为其他列插入值)。 - Dan O'Leary
1
@DanO'Leary,即使没有AUTOINCREMENT,您也可以获得自动递增列 - CL.
1
默认情况下,同一外键不能在项目中重复,这让我感到很困惑! - Cheung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接