Как переименовать столбец первичного ключа в MySQL? - PullRequest
17 голосов
/ 24 апреля 2010

Как переименовать столбец первичного ключа в MySQL?

Ответы [ 6 ]

18 голосов
/ 24 апреля 2010

ничем не отличается от изменения любого другого столбца -

ALTER TABLE `pkey` CHANGE `keyfield` `keyfield2` INT( 11 ) NOT NULL AUTO_INCREMENT 

это меняет столбец keyfield в таблице pkey на имя keyfield2 - впоследствии вы должны предоставить определение, как обычно.

6 голосов
/ 19 мая 2011

Возможно, у вас есть ограничение внешнего ключа. Вы можете отключить их с помощью SET foreign_key_constraints=0, но вы должны помнить, чтобы впоследствии обновить базу данных.

5 голосов
/ 17 июля 2015

Не указывайте элемент PRIMARY KEY в операторе alter. Первичный ключ будет обновлен автоматически.

3 голосов
/ 07 февраля 2012

Возможна плохая практика обхода. Но вы можете экспортировать всю свою базу данных в текстовый файл sql. Найдите и замените ПК, который вы хотите переименовать, а затем восстановите базу данных через sql.

1 голос
/ 19 мая 2011

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

0 голосов
/ 05 декабря 2015

Если у других таблиц есть внешний ключ в вашей таблице, вы не можете напрямую переименовать столбец, используя alter table, он выдаст следующую ошибку: [HY000] [1025] Ошибка при переименовании xxx в yyy (ошибка: 150) Вы должны:

  • удалить внешние ключи из других таблиц, указывая на первичный ключ, который вы хотите переименовать
  • переименовать первичный ключ
  • добавить внешний столбец в другие таблицы

При переименовании таблицы в Intellij генерируется код, который вы отбрасываете, и добавляется внешний ключ.

...