MySQL中重命名列时出现错误

443

如何重命名表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
3
可能是在MySQL中重命名外键列的重复问题。 - OMG Ponies
9个回答

753

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

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

请记住:

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

12
我认为该列包含一个外键,用于获取答案错误,因此您需要删除外键、修改表格并添加外键(最好先备份),您可以通过右键单击表格并修改表格名称来进行修改。 - Chris Sim
7
请记住,在此解决方案中,您将失去所有其他列定义,例如可空性、默认值等(请参见:https://dev59.com/DGoy5IYBdhLWcg3wcNlO)。 - Dejan
所以基本上,重定义列的语法从 MODIFY column <TYPE> 变成了 CHANGE column new_column <TYPE> - mwfearnley
SHOW CREATE TABLE table_name 可以帮助您找出当前列的定义。 - Mr. Deathless
@Dejan 谢谢,这真的很恼人,为什么要求指定类型时却不能指定其他修饰符呢?要么要求类型+修饰符,要么就完全不要求。 - JMac
@JMac 看起来自 MySQL 5.1 以来,所有的修饰符都被支持了,类型只是必需的一个,而且它总是必需的(就像创建表时一样)。 - J.D.

44
标准的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 语法


42

对于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 N-o

14

1
#1064 - 您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方法。在第1行附近。 - Bharanikumar
17
这很有用,但它与你引用的文档不一致:“当您使用CHANGE或MODIFY时,列定义必须包括数据类型和适用于新列的所有属性[...]原始定义中存在但未在新定义中指定的属性不会被保留。” - artfulrobot
它应为“ALTER TABLE xyz CHANGE manufacurerid manufacturerid datatype(length)” - Chris Sim

7
由于语法错误,正确的 ALTER 命令语法应该是 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;

1
重命名MySQL中的列:
ALTER TABLE mytable CHANGE current_column_name new_column_name DATATYPE;

0

修改表结构;

示例:

ALTER TABLE global_user CHANGE deviceToken deviceId VARCHAR(255) ;

-5

语法

alter table 表名 rename column 旧列名 to 新列名;

示例:

alter table library rename column cost to price;


2
在MySQL中,RENAME用于重命名表而不是列,要重命名列,请使用CHANGE。 - jathin
问题是针对MySQL的 - 这不是MySQL中有效的语法。 - tjbp
正如其他人所指出的那样,请使用有效的MySQL语法。 - fool4jesus
存在无效的MySQL语法。 - Hasib Kamal Chowdhury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接