如何在不丢失列数据的情况下更改MySQL表的列位置?


71

我想更改数据库表的列位置而不丢失数据。

例如:

当前表:

+----+------+-------+----------+
| id | name | email | password |
+----+------+-------+----------+

+----+----------+------+-------+
| id | password | name | email |
+----+----------+------+-------+

Answers:


153

尝试这个:

ALTER TABLE table_name MODIFY password varchar(20) AFTER id

这会重置具有table_name原始设置的记录吗?
fungusanthrax

2
@fungusanthrax是的,确实如此。
khue bui

如给定的那样,除“类型”以外的其他字段属性将设置为默认值,并且“注释”将丢失。您可能需要使用<br/> ALTER TABLE table_name修改field_name varchar(20)NOT NULL DEFAULT”评论ID之后的注释
Guy Gordon

28

希拉曼的答案是正确的。但是,如果您使用的是phpMyAdmin,则有一种直观实用的方法。

  1. 打开桌子
  2. 选择“结构”标签
  3. 点击“移动列
  4. 拖放列名称

“结构”选项卡中间的“移动列”链接 移动列弹出


您如何找到“移动列”选项。
Sourav Sarkar

@SouravSarkarıt应该在显示结构的表格下面。版本差异可能适用。
阿曼·奥扎克

您在哪个@version中看到了该选项?
Sourav Sarkar

@SouravSarkar我当前使用的是4.5.4.1版本,但我也很确定它已经存在了一段时间(可能是从4.0版本开始)。
Arman Ozak '16

2
嗨@大卫。恐怕并非如此。在“浏览”选项卡上对表列进行重新排序不会更改实际的列顺序,而是让phpMyAdmin说明如何显示列顺序。之后,如果尝试使用其他工具(例如DataGrip)查看表,则会看到列顺序保持不变。“结构”选项卡上的“移动列”按钮是正确的方法。
阿曼·奥扎克

7

如果您使用的是MySQL工作台,

  1. 右键点击表格
  2. 修改表
  3. 拖动列并重新排序
  4. 单击应用并完成

3

另外,您可以这样做:

ALTER TABLE table_name CHANGE COLUMN column_name column_name data_type AFTER another_column_name;

0

您可以使用Modify / change关键字。

ALTER TABLE [table] CHANGE COLUMN [column] [column] [column definition] AFTER [column]

ALTER TABLE [table] MODIFY COLUMN [column] [column definition] AFTER [column]

例如:

ALTER TABLE table_name MODIFY password varchar(20) AFTER id

ALTER TABLE table_name MODIFY password varchar(20) varchar(20) AFTER id

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.