重命名MySQL中的列时出错


434

如何重命名表中的列xyz?这些列是:

Manufacurerid, name, status, AI, PK, int

我想重命名为 manufacturerid

我尝试使用PHPMyAdmin面板,但出现此错误:

MySQL said: Documentation
#1025 - Error on rename of '.\shopping\#sql-c98_26' to '.\shopping\tblmanufacturer' (errno: 150)

5
您正在尝试更改其中具有外键引用的表。
mellowsoon

Answers:


747

Lone Ranger非常接近...实际上,您还需要指定重命名列的数据类型。例如:

ALTER TABLE `xyz` CHANGE `manufacurerid` `manufacturerid` INT;

请记住:

  • 将INT替换为您的任何列数据类型(必填)
  • 波浪号/反引号(`)是可选的

12
我认为该列包含一个外键以获取答案错误,因此您必须删除外键,更改表并添加外键(最好先备份),并且您可以通过仅右键单击更改名称来更改它在桌子上-alter table
Chris Sim 2014年

7
请记住,在此解决方案中,您会丢失所有其他列定义,例如可空性,默认值等(请参阅:stackoverflow.com/questions/8553130/…)。
Dejan 2015年

因此,基本上是,而不是MODIFY column <TYPE>(用于重新定义列)CHANGE column new_column <TYPE>
mwfearnley

SHOW CREATE TABLE table_name可以帮助您找出当前的列定义
Deathless先生,2016年

@Dejan谢谢,这确实很烦人,为什么当您不能指定任何其他修饰符时要求输入类型?要么需要类型+修饰符,要么根本不需要它。
JMac

43

标准的Mysql重命名语句为:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
CHANGE [COLUMN] old_col_name new_col_name column_definition 
[FIRST|AFTER col_name]

对于此示例:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)

参考: MYSQL 5.1 ALTER TABLE语法


40

对于MYSQL:

ALTER TABLE `table_name` CHANGE `old_name` `new_name` VARCHAR(255) NOT NULL;

对于ORACLE:

ALTER TABLE `table_name` RENAME COLUMN `old_name` TO `new_name`;

3
如果"用于MySQL的列名,则此方法不起作用。不使用任何内容或使用`。
Alexis

13

编辑

您可以使用以下方法重命名字段:

ALTER TABLE xyz CHANGE manufacurerid manufacturerid INT

http://dev.mysql.com/doc/refman/5.1/zh-CN/alter-table.html


1
#1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行附近的''处使用
Bharanikumar,2010年

17
这将很有用,但是对您引用的文档不是正确的:“当您使用CHANGE或MODIFY时,column_definition必须包括数据类型和应应用于新列的所有属性。原始定义中的属性但未针对新定义进行指定。”
artfulrobot

它必须是“ ALTER TABLE xyz更改manufacurerid Manufacturerid数据类型(长度)”
克里斯·辛姆

7

存在语法问题,因为更改命令的正确语法是 ALTER TABLE tablename CHANGE OldColumnName NewColunmName DATATYPE;


2

使用MySQL 5.x,您可以使用:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name DATATYPE NULL DEFAULT NULL;


0

改变桌子;

例:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

句法

将表table_name更改表将旧列名重命名为新列名

例:

将表重命名列成本价格 ;


2
在mysql中,RENAME用于重命名表而不是列,要重命名列,请使用CHANGE。
2015年

问题是针对MySQL的-这在MySQL中不是有效的语法。
tjbp

其他提示,请使用有效的MySQL语法。
fool4jesus

无效的mysql语法。
Hasib Kamal '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.