如何在SQLite中构建唯一约束

时间:2016-07-16 08:01:31

标签: sqlite constraints

我一直在尝试关注如何在SQLite中构建约束的this示例。

我创建了一个表:

CREATE TABLE `users` (
    `user_id`   INTEGER NOT NULL DEFAULT 1 PRIMARY KEY AUTOINCREMENT,
    `row_id`    INTEGER NOT NULL,
    unique (user_id, row_id)
)

比我一直试图插入一样:

  • insert into users(user_id, row_id) values(1, 13)
  • insert into users(user_id, row_id) values(2, 13)

在第二个插入查询中,它失败并显示下一条消息:

  

UNIQUE约束失败:users.user_id:插入用户(user_id,   row_id)值(2,13)

我想允许下一行:

1,13
2,13
1,5

不允许那些

1,13
1,13

2 个答案:

答案 0 :(得分:1)

PRIMARY KEY是设计UNIQUENOT NULL所以user_id必须是UNIQUE

然后,对UNIQUE列和user_id列进行了row_id约束。

您可以使用撰写的PRIMARY KEY

CREATE TABLE `users` (
    `user_id`   INTEGER NOT NULL,
    `row_id`    INTEGER NOT NULL,
    PRIMARY KEY (user_id, row_id)
);

INSERT INTO users(user_id, row_id) VALUES(1, 13);
INSERT INTO users(user_id, row_id) VALUES(2, 13);
INSERT INTO users(user_id, row_id) VALUES(1, 5);

INSERT INTO users(user_id, row_id) VALUES(1, 13);
-- Error: UNIQUE constraint failed: users.user_id, users.row_id

SqlFiddleDemo

答案 1 :(得分:-1)

主键导致问题,一旦将列定义为主列,就无法复制。请尝试删除主键。

CREATE TABLE `users` (
`user_id`   INTEGER AUTO INCREMENT NOT NULL DEFAULT 1,
`row_id`    INTEGER NOT NULL,
unique (user_id, row_id)