2015-09-30 7 views
0

В настоящее время у меня есть составной первичный ключ, состоящий из (user, id). Мой пользователь John Smith, и есть 30 строк, которые относятся к нему, поэтому id auto увеличивается каждый раз, когда создается новая запись. Однако, если бы я хотел добавить нового пользователя, скажем, Джилл Смит в ту же таблицу, есть ли способ, с помощью которого я могу начать (Jill Smith, 1) и иметь автоматическое увеличение id, не испорчая предыдущие записи?Автоинкрементная часть составного ключа

+0

Это звучит как база данных может быть нормирован немного; без каких-либо подробностей это звучит так, как будто вы должны иметь только одну запись в столбце пользователя для Джона Смита и, возможно, потребуется таблица соединений, чтобы присоединиться к пользовательскому ключу с данными привязки. Это также косвенно решит проблему автоинкремента. –

ответ

2

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