如何移动MySQL表中的列?
目前我有以下的MySQL表: Employees (empID, empName, department);
我想要将表更改为以下内容: Employees (empID, department, empName);
这怎么能用ALTER
语句来完成呢?
注意:我只想更改列位置。
如果empName是VARCHAR(50)列:
ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;
编辑
根据评论,你也可以这样做:
ALTER TABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;
请注意,重复的empName
是故意的。 你必须告诉MySQL你想保持相同的列名。
你应该知道这两个语法版本都是针对MySQL的。 例如,在PostgreSQL或许多其他DBMS中,它们将不起作用。
另一个编辑:正如@Luis Rossi在评论中指出的那样,您需要在AFTER
修饰符之前完全指定已更改的列定义。 上面的例子只有VARCHAR(50)
,但是如果你需要其他的特性(比如NOT NULL
或默认值),你也需要包含这些特性。 有关更多信息,请参阅ALTER TABLE
上的文档 。
更改列位置:
ALTER TABLE Employees CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;
如果您需要将其移动到第一个位置,则必须在ALTER TABLE CHANGE [COLUMN]查询的末尾使用FIRST一词:
ALTER TABLE UserOrder CHANGE order_id order_id INT(11) NOT NULL FIRST;
phpMyAdmin在表格的结构视图中为此提供了一个GUI。 选中要select要移动的列,然后单击列列表底部的更改操作。 然后,您可以更改所有列属性,并在屏幕最右侧find“移动列”function。
当然,这只是build立在非常好的最佳答案的查询,但GUI粉丝可能会喜欢的替代scheme。
我的phpMyAdmin版本是4.1.7
我必须运行这个在一个产品的晚期阶段介绍的列,在10 +表。 所以写了这个快速凌乱的脚本来生成所有“相关”表的alter命令。
SELECT CONCAT("ALTER TABLE `",TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"` `",COLUMN_NAME,"` BIGINT AFTER `id`;") FROM information_schema.COLUMNS c WHERE TABLE_SCHEMA = '<YOUR SCHEMA NAME>' AND COLUMN_NAME = '<COLUMN TO MOVE>' AND TABLE_TYPE = 'BASE TABLE' AND '<COLUMN TO MOVE AFTER>' IN (SELECT COLUMN_NAME FROM information_schema.COLUMNS c2 WHERE c.TABLE_NAME = c2.TABLE_NAME);