对于每个表,您应该可以使用如下代码执行此操作(注意:我假设每个*_id 字段的列描述为INTEGER NOT NULL,并且这些相同的字段设置了AUTO_INCREMENT。这对于 ID 列来说是很正常的。)
# 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;
不过,请注意其他人的警告。除非这是您创建的(并且您刚刚决定在项目早期更改命名约定或其他内容),否则更改此设置将破坏任何其他预期与此数据库交互的代码。
希望这会有所帮助,
安东尼
编辑:以上假设您没有外键约束,其他表显式引用 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;