Конвертируйте MyISAM в InnoDB, где таблицы имеют двухколонный (составной) PK, и одним из них является автоинкремент - PullRequest
4 голосов
/ 21 февраля 2011

Я хотел бы преобразовать некоторые из наших таблиц MyISAM в InnoDB, чтобы я мог воспользоваться поддержкой внешнего ключа. Однако в большинстве таблиц используется составной (составной) первичный ключ с двумя столбцами, в котором один из этих столбцов является автоинкрементным (это было сделано по историческим причинам, а также гарантировалось, что автоинкрементный столбец может действовать как своего рода инкрементный ключ для записей в контексте значения другого столбца)

Я понимаю, что нам нужно покончить с первичным ключом из нескольких столбцов, чтобы использовать автоинкремент и InnoDB. У нас есть тысячи записей, и эти записи связаны с другими таблицами.

Есть ли какие-либо советы о том, как преобразовать эти таблицы в InnoDB? Единственный метод, который я придумал, - это сначала добавить новый столбец в каждую таблицу, установить его в качестве единственного первичного ключа с автоматическим приращением, а затем использовать сценарии для обновления зависимых таблиц, чтобы они указывали на новый (действительно уникальный) первичный ключ. .

Спасибо Стив

1 Ответ

2 голосов
/ 09 сентября 2011

В MySQL 5.0 и более поздних версиях вы можете включить столбец автоинкремента как часть первичного ключа, но это должно быть первое поле в индексе.

* ... Столбец AUTO_INCREMENT долженпоявляются как первый столбец в индексе таблицы InnoDB ... *

Проверьте запись документации здесь http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html

...