В настоящее время у меня есть составной первичный ключ, состоящий из (user, id). Мой пользователь John Smith, и есть 30 строк, которые относятся к нему, поэтому id auto увеличивается каждый раз, когда создается новая запись. Однако, если бы я хотел добавить нового пользователя, скажем, Джилл Смит в ту же таблицу, есть ли способ, с помощью которого я могу начать (Jill Smith, 1) и иметь автоматическое увеличение id, не испорчая предыдущие записи?Автоинкрементная часть составного ключа
ответ
№ AUTO_INCREMENT
в MySQL не может иметь несколько «состояний» для отслеживания нескольких счетчиков. Чтобы иметь описанное поведение, вам необходимо реализовать свою собственную логику приложения (без использования функции автоинкремента) и вычислить номер части ключа перед вставкой новых строк.
UPDATE
выше верно вообще в MySQL, но как AUTO_INCREMENT
работы зависит от хранения двигателя.
документация достаточно специфичен в вашем конкретном случае для MyISAM столов:
Если столбец AUTO_INCREMENT является частью нескольких индексов, MySQL генерирует последовательность значений с использованием индекса, который начинается с колонкой AUTO_INCREMENT , если таковой имеется. Например, если таблица содержит индексы PRIMARY KEY (grp, id) и INDEX (id), MySQL будет игнорировать PRIMARY KEY для генерации значений последовательности. В качестве результата таблица будет содержать одну последовательность, а не последовательность на значение grp.
https://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html
Это звучит как база данных может быть нормирован немного; без каких-либо подробностей это звучит так, как будто вы должны иметь только одну запись в столбце пользователя для Джона Смита и, возможно, потребуется таблица соединений, чтобы присоединиться к пользовательскому ключу с данными привязки. Это также косвенно решит проблему автоинкремента. –