重命名INDEX列

时间:2010-05-27 19:50:03

标签: mysql primary-key auto-increment

我有一个包含大约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;

还有许多不同的变体。

最好的办法是什么?

希望你能提出建议

3 个答案:

答案 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