MySQL安排现有的表列

Bar*_*rry 69 mysql

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

例如:我想将列用户名从其当前位置移动到所有列之后,或者我希望它在我的表中的任何特定列之前.

cet*_*ras 99

如果您愿意,可以更改列的顺序.

如果您的用户名列是varchar(255),那么:

alter table `mytable` 
change column username username varchar(255) after `somecolumn`;
Run Code Online (Sandbox Code Playgroud)

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

  • `ALTER TABLE ... MODIFY`是优选的,即使`ALTER TABLE ... CHANGE`有效.原因是后者具有更改列名的附加功能,这使您输入更多(这可能会出错,因为您可能会意外更改列名:-) (4认同)

Bar*_*rry 45

谢谢各位回复,我已经完成了.

ALTER TABLE tbl_user MODIFY gender char(1) AFTER username;
Run Code Online (Sandbox Code Playgroud)

那就像组织你的桌子吧?你不希望你的主键字段在你的表的最后一个顺序,至少我知道如果我遇到这个问题如何协调它,我试图在基于文本的数据库中使用而不是使用gui现在.

再次感谢大家:)


小智 19

简单使用此查询

alter table `admin` modify id int(11) first;
Run Code Online (Sandbox Code Playgroud)

要么

alter table `admin` modify id int(11) after `some_column`;
Run Code Online (Sandbox Code Playgroud)

  • `ALTER TABLE ... MODIFY`只更改列类型和顺序,所以它比`ALTER TABLE ... CHANGE`更好,因为它添加了更改列名(这使你输入更多). (2认同)

Oma*_*mar 9

您的SQL应如下所示:

ALTER TABLE `Customers` MODIFY `UserName` INT (11) AFTER `Orders`
Run Code Online (Sandbox Code Playgroud)

完成!一条线改变位置,没有别的事可做.


我建议反对@ 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`
Run Code Online (Sandbox Code Playgroud)
  • [SAME FIELD SETTINGS]
    指您所在领域的配置.TINYINT,VARCHAR,TEXT等.请记住包括尺寸.EJ.varchar (255)

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


如果你的...

  • 表名: Customers
  • 移动领域: UserName
  • UserName 设置: int(11)
  • 目标位置(表格的最后一个字段): Orders


Dev*_*evy 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;


rah*_*ari -5

您无法更改现有列的顺序。

但您可以删除要更改位置的列,然后使用此命令将其添加到您想要的位置。

ALTER TABLE `MYTABLE` ADD `MYFILED` INT( 5 ) NOT NULL AFTER `POSITION` 
Run Code Online (Sandbox Code Playgroud)

或者

在表的开头添加一个字段

ALTER TABLE `MYTABLE` ADD `MYFIELD` INT( 5 ) NOT NULL FIRST 
Run Code Online (Sandbox Code Playgroud)

  • @OMG Ponies 有没有想过也许他想出于“审美”目的改变顺序?您可以更改顺序。对此有很多答案。这个反应并不好。 (6认同)
  • 根据其他回复,我认为“您无法更改现有列的顺序”是不正确的 (6认同)