php / mysql предотвращает дублирование записей по нескольким столбцам

Я хотел бы придумать стандартную практику, чтобы предотвратить отсутствие дубликатов таблиц там, где это имеет значение. В большинстве случаев дубликаты представляют собой комбинацию переменных, а не одно. Мои первичные ключи – это только уникальные идентификаторы для каждого поля, поэтому я не могу их использовать. То, что я делал, сначала запрашивает таблицу, а затем, если количество строк для рассматриваемой комбинации равно 0, вставка. Тем не менее, я прочитал, что должно быть возможно настроить уникальный ключ для нескольких полей, чтобы обеспечить уникальность. INSERT IGNORE звучит неплохо, но мне нужно будет игнорировать его в нескольких столбцах.

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

Может ли кто-нибудь предложить синтаксис сначала для создания уникальных ключей по нескольким полям, а затем выполнить запрос вставки SQL, который предотвратит обман? Большое спасибо.

Вы можете просто создать индекс с несколькими столбцами в этих столбцах и обеспечить уникальность: см. Руководство по MySQL на странице http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html .

Например, в таблице с id столбцов (уникальный первичный ключ), colA и colB вы запускаете:

 ALTER TABLE table ADD UNIQUE KEY (colA,colB) 

Это он: любые INSERT, которые приводят к дублированию записи в этих двух комбинированных комбинациях, теперь возвращают ошибку MySQL вместо того, чтобы проходить. Если вы используете INSERT IGNORE , ошибка MySQL не будет выбрана, если ее выполнение приведет к нарушению этого уникального ограничения, и ваш оператор INSERT будет спокойно проигнорирован.

Чтобы создать уникальный индекс для текстовых типов, вы можете использовать

 CREATE UNIQUE INDEX indexname ON `tablename` (columnname (100)); 

(100) здесь после имени столбца говорит mysql проверять только первые 100 байтов как уникальные, если вы укажете (4) как длину, то оба

 hello hello world 

такие же, как индекс (оба на самом деле hell в дереве индексов), а mysql не позволяет вставлять их в таблицу.

См. Здесь http://dev.mysql.com/doc/refman/5.0/en/create-index.html