Предотвратить повторяющиеся записи SQL - PullRequest
3 голосов
/ 24 марта 2011

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

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

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

Спасибо!

Ответы [ 3 ]

12 голосов
/ 24 марта 2011
CREATE UNIQUE INDEX idxname ON tablename (fieldname);

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

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

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

0 голосов
/ 24 марта 2011

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

...
select distinct *
  from table1
...
0 голосов
/ 24 марта 2011

Взгляните здесь , вам понадобится уникальный.

...