【问题标题】:SQLite3 UNIQUE constraint failed errorSQLite3 UNIQUE 约束失败错误
【发布时间】:2016-05-26 17:21:40
【问题描述】:

我正在尝试创建一个数据库,允许用户创建“待办事项”列表并在其中填写要完成的项目。但是,当向表中插入数据时,它给了我一个 UNIQUE 约束失败错误,我不知道如何解决它。这是我创建数据库和插入数据的代码。

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

任何帮助将不胜感激!

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    当您插入的数据有一个条目已经在您要插入的表的相应列中时,您会收到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 或 IGNORE”,但我面临的问题是没有添加重复值的新记录。可能是什么问题?
    【解决方案2】:

    您已将 list_id 设置为列表表的主键,这意味着每个记录的值必须是唯一的。因此,尝试使用相同的 list_id 表插入多条记录会导致错误。

    item 表的问题是一样的。

    【讨论】:

    • 那么每个表的主键应该用什么?
    • 通常主键是由sql为你生成的。要创建自动递增的主键,您只需在 PRIMARY KEY 后添加 AUTOINCREMENT。然后您就不需要实际指定键的值(即只为其他列插入值)。
    • @DanO'Leary 即使没有 AUTOINCREMENT,您也会得到 autoincrementing column
    • 这个项目默认不能有相同的外键让我很困惑!?
    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 2021-12-09
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多