如何移动MySQL表中的列?

问题描述 投票:0回答:6

目前我有以下 MySQL 表:

Employees (empID, empName, department);

我想将表格更改为以下内容:

Employees (empID, department, empName);

如何使用

ALTER
语句来完成此操作?

注意:我只想更改列位置。

mysql sql alter
6个回答
412
投票

如果

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
 上的文档了解更多信息。


82
投票
更改列位置:

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;
    

20
投票
phpMyAdmin 在表的结构视图中为此提供了一个 GUI。 选中要移动的列,然后单击列列表底部的更改操作。 然后,您可以更改所有列属性,并且您会在屏幕最右侧找到“移动列”功能。

当然,这只是在完美的最佳答案中构建查询,但 GUI 粉丝可能会喜欢替代方案。

我的 phpMyAdmin 版本是 4.1.7


2
投票
我必须为产品后期引入的列在 10 多个表上运行此操作。因此编写了这个快速的凌乱脚本来为所有“相关”表生成更改命令。

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

0
投票
对于使用TablePlus的用户,您可以标记所有表格,右键->复制,在新表格中->粘贴。


0
投票

在 SQL 中:

如果你想将

id

列移动到第一个位置,
we have a query for that
,如下所示:

ALTER TABLE `mydatabase` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT FIRST;
在此查询中,信息如下:

  • mydatabase:您的表名称。
但是

if you want to move a column after another column

,这意味着您的 A 列可能位于第二列,并且您想将其移动到 B 列之后的表的最后一个位置,因此请使用以下查询:

ALTER TABLE `mydatabase` CHANGE `title` `title` VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL AFTER `img_name`;
本次查询的信息如下:

  • mydatabase:您的数据库名称在这里。
  • title:是你的专栏,那个 你想移动(A 列)。
  • img_name:第二列(B列)。
  • 标题类型是:VARCHAR(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL(也许你的类型不同)

在 PHPMYADMIN 中:

    在侧栏中,单击表格内的
  • +
    ,然后单击 
    COLUMNS
  • 它打开一个包含所有列名称的表。点击下面的
  • change
    action
    (您要移动的列)。现在你看到另一个页面,
  • 最后一项是
  • Move column
    。这是选择选项并选择地方
    您想移动该列。
  • 选择并单击
  • save
     按钮。
© www.soinside.com 2019 - 2024. All rights reserved.