Вы должны иметь возможность сделать это для каждой таблицы с помощью кода, подобного следующему (Примечание: я предполагаю, что описание столбца для каждого поля *_id
равно INTEGER NOT NULL
и что для этих же полей установлено значение AUTO_INCREMENT
. Это довольно нормально для столбца идентификаторов.)
# remove auto_increment, allows us to remove primary key
ALTER TABLE user MODIFY user_id INTEGER NOT NULL;
# remove primary key, allows us to change column name
ALTER TABLE user DROP PRIMARY KEY;
# change column name, re-add auto_increment and primary key
ALTER TABLE user CHANGE user_id id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY;
Прислушайтесь к предупреждениям других парней, хотя. Если это не ваше творение (а вы только что решили изменить соглашение об именах на ранних этапах проекта или что-то в этом роде), изменение этого кода нарушит любой другой код, который ожидает взаимодействия с этой базой данных.
Надеюсь, это поможет,
Anthony
РЕДАКТИРОВАТЬ: приведенное выше предполагает, что у вас нет ограничений внешнего ключа, где другие таблицы явно ссылаются на столбец user.user_id
. Если это не так, вам придется удалить все ограничения внешнего ключа перед изменением имени, а затем добавить их заново. Если вы не уверены, где в вашей базе данных есть связи с внешними ключами, вы можете перечислить их все с помощью следующего кода (скопированного из http://www.xinotes.org/notes/note/477/ для улучшения возможности ответа на вопрос копирования / вставки):
SELECT CONCAT(table_name, '.', column_name, ' -> ', referenced_table_name, '.', referenced_column_name)
FROM information_schema.key_column_usage
WHERE referenced_table_schema = schema()
AND referenced_table_name is not null
ORDER BY table_name, column_name;