Mysql, вставьте, если все столбцы не существуют

У меня есть таблица с 3 столбцами. Ни один из столбцов не является уникальным ключом.

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

given the following table:
a   b   c
----------
1   3   5
7   1   3
9   49  4

a=3 b=4 c=3    should insert
a=7 b=1 c=3    should not insert (a row with these exact values exists)

Решения, которые я нашел до сих пор, нуждаются в уникальном первичном ключе.


person Sean256    schedule 22.08.2013    source источник
comment
Итак, определите составной ключ UNIQUE вместо (a,b,c)?   -  person eggyal    schedule 22.08.2013


Ответы (2)


Самый эффективный способ — добавить в таблицу UNIQUE KEY. Вы также можете создать алгоритм для сравнения значений, но вы не хотите этого делать, если в вашей таблице много столбцов.

person Matthew    schedule 22.08.2013
comment
Да, вам просто нужно составить алгоритм сравнения уникального ключа существующей записи и новой записи. - person Matthew; 22.08.2013
comment
Извините, я не понимаю, что вы говорите. Все 3 столбца одинаково важны, а не только один. Данные, которые я храню, делают так, что один столбец не может быть уникальным. В настоящее время (используя java) я делаю 2 отдельных запроса, один из которых - выбор (где все 3 столбца = x, y, z), а затем делаю вставку только в том случае, если это возвращает 0 результатов. Я хочу сделать это в одном запросе mysql, поэтому нам не нужно дважды нажимать его. - person Sean256; 22.08.2013

Я не уверен, я правильно понял вашу мысль. Но надеюсь, что это поможет.

Прежде всего, вам нужно выбрать строку с предложением WHERE.

SELECT * FROM table WHERE a=$a && b=$b && c=$c

После этого вы fetch_array или fetch_row, если массив или строка существуют, это означает «не вставлять».

person Palm Underscorez    schedule 22.08.2013
comment
Я должен был упомянуть, что все это нужно сделать в самом SQL-запросе, а не с использованием php, как вы предложили, или java в моем случае. - person Sean256; 22.08.2013