В MySQL, как мне написать запрос, чтобы пропустить дублирующую строку при вставке, когда нет уникального поля (первичный ключ)? - PullRequest
1 голос
/ 30 июля 2010

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 30 июля 2010

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

Вы не можете выполнить решение SELECT COUNT(*)..., поскольку оно зависит от условий гонки.То есть кто-то может вставить повторяющуюся строку в момент после выбора и до вставки.Единственный способ обойти это - заблокировать стол с помощью SELECT ... FOR UPDATE или LOCK TABLES.

0 голосов
/ 30 июля 2010

Э, почему бы не сделать первичным ключом?

В противном случае вам нужно просто сделать SELECT COUNT(*) FROM table WHERE field1=value AND ... AND fieldN=value перед КАЖДОЙ вставкой.

...