目前我有以下 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;
当然,这只是在完美的最佳答案中构建查询,但 GUI 粉丝可能会喜欢替代方案。
我的 phpMyAdmin 版本是 4.1.7
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);
在 SQL 中:
如果你想将id
列移动到第一个位置,
we have a query for that
,如下所示:
ALTER TABLE `mydatabase` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT FIRST;
在此查询中,信息如下:
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`;
本次查询的信息如下:
在 PHPMYADMIN 中:
+
,然后单击
COLUMNS
。
change
列
action
(您要移动的列)。现在你看到另一个页面,
Move column
。这是选择选项并选择地方 您想移动该列。
save
按钮。