Уникальная комбинация полей в SQLite? - PullRequest
11 голосов
/ 13 сентября 2011

Я пытаюсь заполнить новую базу данных SQLite строками, основанными на наборе данных, но у меня возникают проблемы с предотвращением дублирования строк.Я мог бы сделать это в Python, но, безусловно, в SQLite должна быть опция разработки.

Мне нужно, чтобы каждая строка существовала только для уникальной комбинации из трех текстовых полей.Если я сделаю каждое текстовое поле связанным с UNIQUE, то все три должны быть уникальными.Но вместо этого я бы хотел уникальную комбинацию из трех строк.

Другими словами, все эти записи должны существовать: (a, a, a) (a, a, b) (a, b, b) (b, b, b)

Если я сделаю все три поля УНИКАЛЬНЫМИ и вставлю эти строки, будут вставлены только (a, a, a) и (b, b, b).Я мог бы объединить поля 1-3 в Python и использовать его в качестве первичного ключа, но это кажется дополнительной работой.

Ответы [ 2 ]

22 голосов
/ 13 сентября 2011
CREATE TABLE (col1 typ
              , col2 typ
              , col3 typ
              , CONSTRAINT unq UNIQUE (col1, col2, col3))

http://www.sqlite.org/lang_createtable.html

3 голосов
/ 13 сентября 2011

Если три столбца действительно являются первичным ключом, то вы можете создать составной первичный ключ:

create table t (
    a text not null,
    b text not null,
    c text not null,
    -- and whatever other columns you have...
    primary key (a, b, c)
)

Если любой из ваших трех столбцов может быть НЕДЕЙСТВИТЕЛЕН, то вы захотите получить с уникальным ограничением Cade.вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...