MySQL安排现有的表列


70

如何更改MySQL表中某个现有列的位置?

例如:我想将列用户名从当前位置移动到所有列之后,或者我希望它在表中的某些列之前。

Answers:


103

您可以根据需要更改列的顺序。

如果您的用户名列为varchar(255),则:

alter table `mytable` 
change column username username varchar(255) after `somecolumn`;

如果有助于更好地读取表定义,那为什么不呢?


1
如果您使用旧的phpmyadmin,则可以转到“结构”标签,然后编辑列。只需单击(保存),然后单击“编辑”,并在“ some_column之后附加”...。例如。您将获得“”更改表mytable 更改列用户名用户名varchar(255)“”,然后将其追加,因此它将成为“”更改表mytable 更改列用户名用户名varchar(255)。
Daniel Unterberger

4
ALTER TABLE ... MODIFY即使可行,也是可取的ALTER TABLE ... CHANGE。原因是后者具有更改列名的附加功能,这使您键入更多(容易出错,因为您可能会不小心更改列名:-)
Devy 2015年

46

谢谢大家的答复,我已经做好了。

ALTER TABLE tbl_user MODIFY gender char(1) AFTER username;

好吧,就像整理桌子一样吗?您不希望您的主键字段位于表的最后一位,至少我知道如何在遇到该问题时进行配置,我试图在基于文本的数据库中使用而不是使用gui现在。

再次感谢你们:)


20

简单使用此查询

alter table `admin` modify id int(11) first;

要么

alter table `admin` modify id int(11) after `some_column`;

2
ALTER TABLE ... MODIFY仅更改列的类型和顺序,因此比ALTER TABLE ... CHANGE添加更改列的名称(它使您键入更多)更可取。
Devy

9

您的SQL应该如下所示:

ALTER TABLE `Customers` MODIFY `UserName` INT (11) AFTER `Orders`

做完了!一行可以更改位置,无事可做。


我建议不要使用@ rahim-asgari的建议ALTER TABLE MYTABLE ADD MYFILED INT( 5 ) NOT NULL AFTER POSITION,因为您将:

  1. 添加一个新字段
  2. 将旧字段的数据复制到新字段
  3. 修改任何约束/索引
  4. 删除旧栏位

句法:

ALTER TABLE `TableName` MODIFY `FieldToBeMoved` [SAME FIELD SETTINGS] [ACTION] `TargetPosition`
  • [SAME FIELD SETTINGS]
    指您的字段的配置。TINYINT,VARCHAR,TEXT等。请记住包括大小。jvarchar (255)

  • [ACTION]
    您可以移动字段BEFOREAFTER特定字段。
    替换为BEFOREAFTER相应地。


如果你的...

  • 表名: Customers
  • 要移动的字段: UserName
  • UserName 设置: int(11)
  • 目标排名(表格的最后字段): Orders

5

ALTER TABLE [tbl_name] MODIFY|CHANGE [column definition] [AFTER|BEFORE] [a_column]两者都会起作用。MODIFY如果您只想更改列顺序而不重命名,那将是更好的选择。另外,您不能在单个ALTER TABLE语句中组合重新排序的多列。IE将整数列col1,col2,col3的顺序重新排列为col3,col2,col1的顺序,您将必须执行

ALTER TABLE tbl_name MODIFY col3 int FIRST; ALTER TABLE tbl_name MODIFY col2 int AFTER col3;


-5

您不能更改现有列的顺序。

但是您可以删除要更改位置的列,并使用此命令将其添加到所需位置。

ALTER TABLE `MYTABLE` ADD `MYFILED` INT( 5 ) NOT NULL AFTER `POSITION` 

要么

在表格的开头添加一个字段

ALTER TABLE `MYTABLE` ADD `MYFIELD` INT( 5 ) NOT NULL FIRST 

+1:列顺序完全是美观的,更改该顺序没有任何好处
OMG Ponies 2010年

5
@OMG Ponies有没有想过也许他想为了“审美”目的改变顺序?您可以更改顺序。有很多答案。这个反应不好。
NVG 2014年

5
根据其他答复,我认为“您不能更改现有列的顺序”根本不正确
kris 2014年
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.