2014-05-23 3 views
-2

Скажите, если бы я хотел, чтобы один столбец в таблице имел не равные значения integer или varchar, тогда можно использовать уникальное значение с «insert ignore into», чтобы избежать дублирования ввода данных или лучше использовать некоторую функцию php? ,Можно использовать уникальный идентификатор, чтобы избежать дублирования записи в mysql?

+2

Это в значительной степени определение первичного ключа. Проведите некоторое исследование нормализации базы данных, чтобы узнать больше об этом. – Kryten

+0

спасибо Критен за основное объяснение, но я думаю, я не спрашивал об этом. Мой вопрос состоял в том, могу ли я использовать уникальное значение в базе данных, чтобы избежать дублирования записи. Если да, следует ли использовать уникальное значение, чтобы избежать дублирования записей или лучше использовать некоторые php-функции. – Manish

ответ

1

Чтобы избежать дублирования ввода данных, мне легче всего использовать модификатор AUTO_INCREMENT в поле для первичного ключа.

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

+0

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

+0

О, извините! Я взял это в другом направлении. :( –

1

insert ignore ничего не вставит, если в уникальном поле есть дубликат. Это также не вызовет ошибки, так что это зависит от того, что вы реализуете.

1

Создайте уникальный индекс в столбце, который вы хотите предотвратить дублированием. Затем я рекомендую с помощью:

INSERT INTO ... 
ON DUPLICATE UPDATE columnName = columnName 

, а не делать это в PHP, потому что вы хотите, чтобы минимизировать количество обращений к базе данных. Чтобы сделать это в PHP, вам нужно сделать два запроса: сначала a SELECT, чтобы увидеть, существует ли строка, а затем INSERT.

ON DUPLICATE KEY UPDATE предпочтительнее INSERT IGNORE, так как он не мешает вам получать уведомления о других ошибках. Вам нужно указать хотя бы один столбец для обновления; установив столбец в текущее значение, ничего не меняется.

+0

Я рекомендую «на повторное обновление ключа», а не «вставить игнорировать», потому что последний не будет сообщать о каких-либо ошибках, а первый будет игнорировать только повторяющиеся ошибки ключа. Но это незначительный каламбур. –

+0

Вы имеете в виду 'в дубликате key ignore', right? – Barmar

+0

. Я хочу, чтобы синтаксис был доступен. Вместо этого просто установите столбец равным самому себе. В этом случае MySQL не делает обновления, потому что никаких данных не меняется. –

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