2014-08-26 3 views
0

Мне нужно вставить значения в таблицу, если в базе данных уже нет комбинации из двух значений. Меня не волнует anotherdata (если они существуют или нет). Позволяет иметь таблицу, как это:MySQL Вставить в таблицу, если комбинация переменных не существует

+---+---+--------------+ 
| x | y | anotherdata | 
+---+---+--------------+ 
| 1 | 1 | some string | 
| 1 | 2 | string2  | 
| 1 | 3 | string3  | 
+---+---+--------------+ 

Мое решение является первым запрос к базе данных, если есть данная запись:

SELECT * FROM map WHERE x = ? AND y = ? 

И если num_rows равен 0, то вставить новую запись:

INSERT INTO table (x, y, anotherdata) VALUES (?, ?, ?) 

Если num_rows больше 0, ничего не делайте.

Я не могу использовать уникальные ключи здесь, потому что x и y не уникальны. Уникальность - это просто их комбинация. Кроме того, я ожидаю, что эта таблица будет иметь тысячи записей и использование нескольких запросов будет очень медленным.

+1

У вас есть вопросы? Весьма возможно определить UNIQUE KEY для комбинации двух (или более) столбцов. Если определено ограничение UNIQUE, вы можете использовать инструкцию 'INSERT IGNORE', чтобы вставить только те строки, которые не нарушают ограничение UNIQUE. Если вы действительно заботитесь о 'anotherdata', тогда вы можете использовать инструкцию' INSERT ... ON DUPLICATE KEY'. Но, это совершенно не ясно, если вы задавали вопрос или просто предлагаете отчет о состоянии. – spencer7593

ответ

0

Решение должно использовать UNIQUE KEY на комбинацию из двух колонок. Также ваш запрос должен выглядеть так:

INSERT IGNORE INTO table (x, y, anotherdata) VALUES (?, ?, ?) 
Смежные вопросы