如何在MySQL表中移动列?

vfh0ocws  于 2022-11-28  发布在  Mysql
关注(0)|答案(5)|浏览(237)

当前我有以下MySQL表:Employees (empID, empName, department);
我想将该表更改为:Employees (empID, department, empName);
如何使用ALTER语句来实现这一点?
注意:我只想更改列位置。

b4lqfgs4

b4lqfgs41#

如果empNameVARCHAR(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或默认值),则还需要包括这些特征。有关更多信息,请参考the docs on ALTER TABLE

xuo3flqw

xuo3flqw2#

更改列位置:

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;
eivgtgni

eivgtgni3#

phpMyAdmin在表格的结构视图中提供了一个GUI。选中要移动的列,然后单击列列表底部的更改操作。然后,您可以更改所有列的属性,您将在屏幕的最右侧找到“移动列”功能。
当然,这一切只是在完美的顶级答案中构建查询,但GUI爱好者可能会欣赏替代方案。
我phpMyAdmin版本是4.1.7

vptzau2j

vptzau2j4#

我不得不为一个在产品后期引入的列在10多个表上运行这个命令,所以写了这个快速的不整洁的脚本来为所有“相关”表生成alter命令。

SET @NeighboringColumn = '<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';

SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"` 
`",COLUMN_NAME,"` ", c.DATA_TYPE, CASE WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT 
NULL THEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH, ")") ELSE "" END ,"  AFTER 
`",@NeighboringColumn,"`;")
FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND c.COLUMN_NAME = '<COLUMN TO MOVE>'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
AND @NeighboringColumn IN (SELECT COLUMN_NAME 
    FROM information_schema.COLUMNS c2 
    WHERE c2.TABLE_NAME = t.TABLE_NAME);
zxlwwiss

zxlwwiss5#

对于那些使用TablePlus的用户,您可以只标记所有表,右键单击-〉复制,在新表中-〉粘贴。

相关问题