2011-02-08 2 views
0

Мне нужно добавить строку в таблицу базы данных MySQL, но только если строка еще не существует. Мой сервер базы данных просто спустился, поэтому я не могу проверить это, но будет ли это работать так, как ожидалось?Проверьте, существует ли строка, если она не добавлена ​​[MySQL]

INSERT INTO `blocks` (`block_file`,`settings_group`) 
VALUES ('announcements','announcement_settings') 
WHERE NOT EXISTS (SELECT `block_file`,`settings_group` 
        FROM `blocks` 
        WHERE `block_file`='announcements' AND `settings_group`='announcement_settings') 

Кажется, что звуковая логика. Является ли это допустимым запросом или есть лучший способ сделать это?

+0

В SQL Server этот тип подхода даст вам условие гонки. Не уверен, что это верно и для MySQL. Это только этот конкретный запрос или вы всегда хотите обеспечить уникальность этих двух столбцов? –

+1

То же самое с mysql - вы не можете изменить таблицу во время ее выбора –

ответ

3

Просто создайте индекс UNIQUE на столбцах (block_file,settings_group), и MySQL никогда не позволит вам вставить строку, которая будет дублировать эти значения.

И ответить на вопрос: Нет, это не сработает.

+1

И если вам нужно вставить несколько записей, просто используйте ключевое слово IGNORE, поэтому, если вы попытаетесь вставить повторяющуюся строку, ошибка будет рассматриваться как предупреждение. Проверьте sintax http://dev.mysql.com/doc/refman/5.0/es/insert.html – fiunchinho

+0

Спасибо! Работает так же, как ожидалось, и намного чище. – Steven

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