Я хотел бы добавить еще одну вещь, которую следует иметь в виду при использовании функции auto_inc в MySQL:
Представьте, что у вас есть таблица employees
, которая использует auto_inc и (по любой причине) вторую таблицу с именем former_employees
. Давайте далее притворимся, что каждому сотруднику будет присвоен уникальный идентификатор (следовательно, auto_inc), и он даже не потеряет его из-за увольнения или увольнения.
По соображениям производительности (давайте представим, что в компании несколько миллиардов сотрудников) ваша компания перемещает записи бывших сотрудников в одноименную таблицу.
Теперь вот снимок двух таблиц (не обращайте внимания на маленькие идентификаторы):
employees former_employees
------------------------ ------------------------
id | name | ... id | name | ...
------------------------ ------------------------
27 | Peter | ... 29 | Andrew | ...
28 | Jacko | ... 30 | Dennis | ...
32 | Paula | ... 31 | Lenny | ...
33 | JoDon | ...
Обратите внимание, что former_employees
последний идентификатор равен 33
и что employees
счетчик auto_inc равен 34
прямо сейчас.
Если вы выключите сервер на этом этапе и перезапустите его, employees
auto_inc вернется к 33 !!! Это потому, что MySQL не сохраняет счетчик auto_inc между перезапусками !
Имейте это в виду, хотя.
С уважением.
PS: Чтобы обойти эту «особенность», вам придется запускать хранимые процедуры, которые смотрят на former_employees
последний идентификатор и устанавливают его, если он больше.
Примечание (S.Leske): Это относится к таблицам InnoDB, но не к таблицам MyISAM. Не знаю насчет других настольных движков.