我一直在尝试关注如何在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
答案 0 :(得分:1)
PRIMARY KEY
是设计UNIQUE
和NOT 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)
)