2016-07-16 6 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 является конструкцией 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

Первичный ключ является причиной проблемы, когда столбец определен как первичный не может быть повторен. Попробуйте сбросить основной ключ.

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

)

Смежные вопросы