MySQL: ALTER IGNORE TABLE ADD UNIQUE, что будет усечено? - PullRequest
29 голосов
/ 28 марта 2011

У меня есть таблица с 4 столбцами: идентификатор, тип, владелец, описание.Идентификатор - AUTO_INCREMENT PRIMARY KEY, и теперь я хочу:

ALTER IGNORE TABLE `my_table`
    ADD UNIQUE (`type`, `owner`);

Конечно, у меня есть несколько записей с типом = 'Apple' и владельцем = 'Apple CO'.Итак, у меня вопрос, какая запись будет особенной, чтобы остаться после этой ALTER TABLE, той, у которой наименьший идентификатор или, может быть, самой большой в качестве последней вставленной?

1 Ответ

43 голосов
/ 28 марта 2011

Первая запись будет сохранена, остальные удалены & sect; & sect; :

IGNORE является расширением MySQL для стандартный SQL. Он контролирует, как ALTER ТАБЛИЦА работает, если есть дубликаты на уникальные ключи в новой таблице или если предупреждения появляются, когда строгий режим включен. Если IGNORE не указано, копия отменяется и откатывается, если возникают ошибки дубликата ключа. Если IGNORE указано, только первая строка 1010 * используется строк с дубликатами на уникальный ключ, другие конфликтующие строки удалено . Неверные значения усечено до ближайшего соответствия приемлемое значение

Я предполагаю, что «первый» здесь означает тот, который имеет наименьший идентификатор, предполагая, что идентификатор является первичным ключом.

Также обратите внимание:

Начиная с MySQL 5.7.4, предложение IGNORE для ALTER TABLE удалено , и его использование приводит к ошибке .

...