Это ведет себя как ожидалось.
Рассмотрим:
CREATE TABLE autoincrement_test (
ID tinyint(1) unsigned NOT NULL AUTO_INCREMENT,
NAME varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`DESC` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (ID),
UNIQUE KEY UNIQUE_KEY (NAME)
) ENGINE=InnoDB AUTO_INCREMENT=255 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE autoincrement_test auto_increment = 255;
INSERT INTO autoincrement_test (NAME, `DESC`) VALUES ('a', 'aaaa');
INSERT INTO autoincrement_test (NAME, `DESC`) VALUES ('b', 'bbbb');
Это приводит к следующей ошибке:
ER_DUP_ENTRY: Дублирующая запись '255' для ключа 'PRIMARY '
Это в основном то, что вы ожидаете.
Теперь, если вы добавите ON DUPLICATE KEY UPDATE
к последнему оператору INSERT
, ошибка не будет сгенерирована, и содержимое таблицы будетсейчас:
| ID | NAME | DESC |
| --- | ---- | ---- |
| 255 | a | bbbb |
Демонстрация на MySQL 5.6 Fiddle DB (вы можете прокомментировать предложение ON DUPLICATE KEY
для генерации ошибки).
NB: DESC
является зарезервированным словом в MySQL (и в большинстве других RDBMS, следовательно, оно должно быть заключено в обратные галочки).