Если у вас есть дубликаты в вашей таблице, и вы используете
ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
, запрос завершится с ошибкой 1062 (дубликат ключа).
Но если вы используете IGNORE
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
дубликаты будут удалены. Но в документации не указывается, какая строка будет сохранена:
blockquote>
IGNORE
- расширение MySQL для стандартного SQL. Он контролирует работуALTER TABLE
, если в уникальной клавише в новой таблице есть дубликаты, или если предупреждения включены, когда включен строгий режим. ЕслиIGNORE
не указывается, копия прерывается и откатывается, если возникают ошибки с повторяющимися ключами. Если указаноIGNORE
, для строк с дубликатами на уникальном ключе используется только одна строка. Остальные конфликтующие строки удаляются. Неверные значения усекаются до ближайшего подходящего допустимого значения. Начиная с MySQL 5.7.4, предложение IGNORE для ALTER TABLE удаляется, и его использование вызывает ошибку.Если ваша версия 5.7.4 или выше - вы можете:
- Скопировать данные во временную таблицу (это необязательно должно быть временным техническим).
- Усечь исходную таблицу.
- Создайте УНИКАЛЬНЫЙ ИНДЕКС.
- И скопируйте данные с помощью
INSERT IGNORE
(который все еще доступен).CREATE TABLE tmp_data SELECT * FROM mytable; TRUNCATE TABLE mytable; ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D); INSERT IGNORE INTO mytable SELECT * from tmp_data; DROP TABLE tmp_data;
Если вы используете модификатор
blockquote>IGNORE
, ошибки, возникающие при выполнении инструкцииINSERT
, игнорируются. Например, безIGNORE
строка, которая дублирует существующий индексUNIQUE
илиPRIMARY KEY
в таблице, вызывает ошибку с дубликат-ключом, и оператор прерывается. СIGNORE
строка отбрасывается и ошибки не возникает. Игнорируемые ошибки генерируют предупреждения.Также см .: INSERT ... SELECT Синтаксис и Сравнение ключевого слова IGNORE и строгого режима SQL
Простой текст свободной формы.
Проверка всего сообщения/почтовых индексов в мире слишком трудна; фиксированный список стран слишком политически неоднозначен; обязательное state/region/other административное подразделение является просто несоответствующим (слишком часто, меня спрашивают, какое графство я живу в - когда я не делаю, потому что Большой Лондон не является графством вообще).
Главное, это является просто ненужным. Ваше приложение очень вряд ли будет моделировать адреса любым серьезным способом. Если Вы хотите почтовый адрес, просите почтовый адрес. Большинство людей не так глупо, чтобы вставить что-то другое, чем почтовый адрес, и если они делают, они могут поцеловать свой недавно приобретенный товар пока.
исключение к этому - то, при выполнении чего-то, что это естественно ограничивается в одну страну так или иначе. В этой ситуации необходимо попросить, скажем, {почтовый индекс, номер дома} пара, которой является достаточно для идентификации почтового адреса. Я предполагаю, что Вы могли достигнуть подобных вещей с расширенным почтовым индексом в США.
В прошлом я смоделировал формы, которые должны были быть международными после форм адреса поставки взлетов/FedEx на их веб-сайтах (я фигурировал, не знают ли они, как обработать международный порядок, мы все политы из шланга). Поля, которые они используют, могут использоваться в качестве ссылки для установки Вашей схемы.
В целом необходимо понять, почему Вы хотите адрес. Это для поставки/отправки по почте? Тогда существует действительно только одно требование, имейте отдельную страну. Другие строки являются свободной формой, чтобы быть заполненными в пользователем. Причиной этого является общая передающая стратегия почты: любая входящая почта для иностранного государства пересылается, не смотря на другие строки адреса. Следовательно, подробная информация анализируется только почтовым сортировщиком, расположенным в самой стране. Как получатель, они будут знакомы с национальными соглашениями.
(UPS может сгруппировать вместе некоторые небольшие европейские страны, e.. все Низкие Страны, вероятно, обслуживаются из Бельгии - идея все еще содержит.)
Необходимо предоставить немного больше подробную информацию о том, как Вы планируете использовать данные. Например, поля как Город, состояние, Страна может или быть текстом в единственной таблице или быть кодами, которые связаны с отдельной таблицей с Внешним ключом.
Самый Простой был бы
Address_Line_01 (Требуется, Не пробел) Значительный Город Address_Line_02 Address_Line_03 (Необходимый) Контакт (Необходимая) (Необходимая) Страна состояния Province_District (Требуемая)
, Все вышеупомянутое может быть текстом/Unicode с соответствующими длинами поля.
Номера телефона как применимые.
Думаю, можно добавить текст страны / города и адреса. Страна и город должны быть отдельными для отчетности. Менеджеры всегда запрашивают такие отчеты, которых вы не ожидаете, и я не предпочитаю запускать LIKE-запрос через большую базу данных.