2013-11-09 5 views
1

Я в основном хочу вставить две цифры ('Val', 1) в столбцы (, jg) таблицы t1. Хотя cls настроен как уникальный, jg должен появляться несколько раз с одинаковым значением, поэтому INSERT IGNORE не будет работать. Тем не менее, я должен проверить, существует ли пара ('Val', 1), и если не так, мне нужно вставить эти значения.MySQL Вставка: Избегайте дубликатов с несколькими колонами

Я пробовал так:

INSERT INTO t1 (`cls`,`jg`) 
SELECT 'Val',1 FROM cls WHERE NOT EXISTS(
    SELECT 1 FROM cls WHERE `cls`='Val' AND `jg`=1) 
LIMIT 1; 

Но это не работает, если таблица пуста, потому что тогда внешний оператор выбора не содержит записей ...

Как мне действовать ? Я понятия не имею, как обращаться с этим по-другому ...

ответ

0

Используйте уникальный составной индекс на cls, jg.

ALTER IGNORE TABLE t1 ADD UNIQUE INDEX(cls(200), jg) 

Затем используйте

INSERT.. ON DUPLICATE KEY UPDATE 
+0

Это дает мне 'BLOB/TEXT столбец 'ЦБС', используемые в описании ключа без ключа length'; вероятно, потому что cls уже уникален сам по себе? – Luke

+0

Не уверен, попробуйте сбросить ограничение на cls. – Mihai

0

Вы ошибаетесь. Если у вас есть уникальное ограничение (например, первичный ключ) на cls, которое никоим образом не мешает значениям jg.

sql fiddle

+0

Но я не хочу проверять, существует ли значение 'cls', я хочу проверить как' cls' _and_ 'jg'. Например. если бы у меня была запись («XYZ», 1) в таблице, было бы правильно вставить («Значение», 1), но если там уже («Значение», 1) внутри, это не так. – Luke

+0

О, я тогда неправильно прочитал вопрос. @Mihai является правильным, составьте индекс на обоих полях, а затем нормальный INSERT IGNORE. –

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