我有一个包含大约40个表的数据库,需要重命名每个索引列。
IE USER表中有一堆字段,如
user_id | user_username | user_password | etc...
我想将ID列重命名为id,即
id | user_username | user_password | etc...
但是我一直在alter table命令上得到mysql错误,即。
ALTER TABLE数据库RENAME COLUMN user_id为id;
还有许多不同的变体。
最好的办法是什么?
希望你能提出建议
答案 0 :(得分:0)
您必须删除所有外键约束,更改主键,然后再次添加约束。
顺便说一句,更改主键是一件非常严肃的事情,你应该只在真正需要时才这样做。此更改将破坏使用您的数据库的每个应用程序。
答案 1 :(得分:0)
甚至上面提到的关于放弃约束并将它们全部放回去的内容。对于数据库工程/结构来说,这一切都很好,但即便完成,使用它们的应用程序也有各自的问题。对数据库列名称执行搜索替换也不起作用。特别是在某些时候你会看到命令结构,你只会弄乱代码。
答案 2 :(得分:0)
您应该能够为每个表执行此操作,使用以下代码(注意:我假设每个*_id
字段的列描述为INTEGER NOT NULL
,并且这些字段具有{ {1}}设置。这对于ID列来说非常正常。)
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;
列。如果不是这种情况,则必须在更改名称之前删除所有外键约束,然后重新添加它们。如果您不确定数据库中存在外键关系的位置,可以使用以下代码列出它们(从http://www.xinotes.org/notes/note/477/复制以提高答案的复制/粘贴能力):
user.user_id