2016-07-16 85 views
0

我一直試圖按照this的示例來了解如何在SQLite中構建約束條件。如何在SQLite中構建唯一的約束條件

我創建了一個表:

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 

回答

1

PRIMARY KEY是由設計UNIQUENOT NULL所以user_id必須是UNIQUE

然後,您對user_idrow_id列有UNIQUE約束。


你可以使用由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

主鍵是導致該問題,一旦列定義爲初級不能被複制。請嘗試刪除主鍵。

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