如何重新排列MySQL列?


69

我需要移动现有列的位置(以获得更好的可见性)。

如何做到这一点而又不影响数据?


6
不要傻瓜:第一个关于交换数据,第二个关于“ sqlyog”。
P

一种保存方法是使用PHPMyAdmin的“移动列”功能:stackoverflow.com/a/34682789/1066234
Kai Noack

Answers:


73

修改也可以。看一看:

ALTER TABLE foo MODIFY bar bartype AFTER baz;

有人能解释一下“更改列”和“修改”之间的区别吗?修改是否是一种重量较轻的操作?它不会锁定桌子吗?谢谢。更新:看起来很像CHANGE和MODIFY是同义词,其中为Oracle用户添加了MODIFY。dev.mysql.com/doc/refman/5.7/en/alter-table.html
jjohn

2
此方法有效,但请注意(至少在我的设置上)移动列会删除该列中的所有auto_increment设置。
马特·桑德斯

3
如果未在alter语句中指定默认值,则也会丢失默认值。
文森特

54

我知道的唯一方法是更改​​列。您将首先使用提取列定义,SHOW CREATE TABLE然后发出ALTER TABLE

ALTER TABLE foo
CHANGE COLUMN bar
bar COLUMN_DEFINITION_HERE
FIRST;

或者,如果您希望其他某些专栏之后发表它:

... AFTER OTHER_COLUMN;

1
我遇到了问题,BEFORE反而使用了FIRST
John Magnolia

8
MySQL语法链接中没有“之前” ,只有“先”后
DocGono,2015年

3
如果只想对列进行重新排序ALTER TABLE ... MODIFY,则它是首选,因为它不会再次以语法格式要求您输入列名,您可以无意中对列进行重命名,而MODIFY不必。
Devy

7
  1. Alter Table table_name首先修改column_name column_datatype;
  2. 更改表table_name修改column_name column_datatype other_column_name之后;

1

这是SQL查询
ALTER TABLE table_name MODIFY COLUMN misplaced_column列定义AFTER other_column; Column-definition中,是完整的列定义。要查看列定义(如果使用的是phpmyadmin),请单击“结构”选项卡。然后单击所需列上的更改链接。然后使用任何修改,单击保存。它将向您显示sql。复制sql并在末尾添加* AFTER other_column *。这将是全部。

如果您想将* misplaced_column *带到第一个位置,则 ALTER TABLE table_name MODIFY COLUMN misplaced_column列定义FIRST;

但是,这似乎是一个重复的问题。


1

基于@VKGS的答案:

如果您的表的语言为:

|      description    |         name     |
|---------------------|------------------|
|      fbi agent      |         jane     |
|---------------------|------------------|
|      mi6 agent      |         kurt     |
|---------------------|------------------|

您想将列名设为第一列或在描述之前执行以下命令:

ALTER TABLE language MODIFY description varchar(100) AFTER name;

不要忘记列的类型。

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.