2011-03-23 4 views
3

Я хочу, чтобы предотвратить дублирование строк текстового поля SQL. То есть, если строка 1 имеет поле имени, которое уже определено как «Джон Смит», я не хочу, чтобы он мог добавить еще один «Джон Смит» (как это обычно бывает в этом названии).Предотвращение дублирования записей SQL

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

О, и это на сайте PHP.

Спасибо!

+0

Вы можете использовать уникальный индекс в поле в mysql? тогда, когда php делает вставку дескриптор дубликат ошибки ввода. – Jacob

ответ

12
CREATE UNIQUE INDEX idxname ON tablename (fieldname); 

Добавление этого индекса будет гарантировать, что нет повторяющихся записей для fieldname полей будут записаны в tablename таблицы.

Вы получите ошибку MySQL со вторым клиентом. Вы должны обработать это в своем PHP-коде и снова разместить форму (вместо того, чтобы просто отображать сообщение об ошибке).

Другая возможность (для более сложных сидений) - это функциональность LOCK. Если вы заблокируете таблицу перед проверкой, а затем вставьте свою запись, параллельная операция (во втором окне браузера) будет отложена до тех пор, пока вы не отпустите блокировки. Затем запись будет сохранена, поэтому второй скрипт PHP будет см. Его и обработайте его.

+2

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

+0

Отличный ответ, спасибо! Отлично работает с моим существующим кодом, так как он ударит его по странице, говоря, что вы уже сделали это. Благодаря! – Kevin

0

DISTINCT также может использоваться для выбора уникальных строк.

... 
select distinct * 
    from table1 
... 
Смежные вопросы