Лучший способ обработки ограничений первичного ключа? - PullRequest
0 голосов
/ 11 июля 2011

у меня есть эта таблица sqlite:

CREATE TABLE frames (videomd5 TEXT, framemd5 TEXT, type TEXT, PRIMARY KEY (videomd5, framemd5))

Как вы можете видеть, таблица имеет комбинированный ПЕРВИЧНЫЙ КЛЮЧ, потому что допускается, чтобы одно из полей имело те же значения, ноникогда не одновременно.

В настоящее время я выполняю такую ​​проверку

SELECT framemd5 FROM frames WHERE framemd5='$digest' AND videomd5='$videomd5'

, прежде чем добавить что-то в таблицу, чтобы избежать ПЕРВИЧНЫХ КЛЮЧЕВЫХ ОГРАНИЧЕНИЙ, но я чувствуюесть лучший способ справиться с этим.Должен ли я запускать ВСТАВКУ, не проверяя сначала, а потом отменить ОГРАНИЧЕНИЕ?Если так, как это лучше всего сделать в Perl?

Спасибо

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Да, вы можете использовать «ИЛИ IGNORE» в вашей вставке, например:

sqlite> create table bla (id INT PRIMARY KEY);
sqlite> insert into bla values (1);
sqlite> insert into bla values (1);
Error: column id is not unique
sqlite> insert or ignore into bla values (1);
sqlite> 

Подробнее см. В официальном документе: http://www.sqlite.org/syntaxdiagrams.html#insert-stmt

0 голосов
/ 11 июля 2011

Как вы сказали сами - есть два способа, сделать несколько тестов или выбрать тот, который соответствует вашему стилю кодирования.

Однако я предпочитаю первый подход, чем обработку исключений нарушения первичного ключа

...