60

我知道,我们不能使用 重命名列modify column syntax,但是可以change column syntax

我的问题是: 的主要用途是modify syntax什么?

例如,

alter table tablename change col1 col1 int(10) not null

代替

alter table tablename modify col1 int(10) not null



已编辑的
问题已替换

的主要用途是modify syntax什么?

上面的问题被下面的问题取代了

为什么我们必须使用更改列而不是修改列?

4

5 回答 5

86

CHANGE COLUMN 如果您已经创建了 MySQL 数据库,并且在您的某个列命名错误之后决定,您不需要删除它并进行替换,您可以简单地使用change column重命名它。

ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL FIRST;

MODIFY COLUMN 这个命令可以做 CHANGE COLUMN 可以做的所有事情,但不会重命名列。如果你需要在 MySQL 中调整列的大小,可以使用 modify SQL 命令。通过这样做,您可以允许比以前更多或更少的字符。您不能使用 modify 和 other 重命名列

ALTER TABLE MyTable MODIFY COLUMN foo VARCHAR(32) NOT NULL AFTER baz;

注意:ALTER TABLE 用于更改表意味着更改列名、大小、删除列。没有 ALTER TABLE 命令的帮助,不能使用 CHANGE COLUMN 和 MODIFY COLUMN 命令。

于 2013-02-08T07:12:47.873 回答
27

区别在于您是要更改列名、列定义还是两者都更改。

改变

可以更改列名或定义,或两者都更改
ALTER TABLE t1 CHANGE a b BIGINT NOT NULL

调整

可以更改列定义但不能更改其名称
ALTER TABLE t1 MODIFY b INT NOT NULL

重命名列(来自 MySQL 8.0)

可以更改列名但不能更改其定义
ALTER TABLE t1 RENAME COLUMN b TO a


此外,CHANGEandMODIFY后面可以跟一个可选的COLUMN关键字。

完整解释:

  1. MySQL 5.7 Docs - 重命名、重新定义和重新排序列
  2. MySQL 8.0 Docs - 重命名、重新定义和重新排序列
于 2019-10-28T09:35:35.907 回答
4

经过一个多小时的努力尝试将非 auto_increment 列添加到 auto_increment 语句中,我发现了一个不同之处:

alter table `doctor_experience` modify column `id` int(11) unsigned auto_increment

有效,但声明:

alter table `doctor_experience` change column `id` `id` int(11) unsigned auto_increment 

会报错。

于 2016-11-21T15:04:49.747 回答
2

那是一样的。这样做是为了支持另一种语法(据我所知,Oracle ALTER TABLE)。你可以同时使用它们。

注意:ALTER TABLE CHANGE old_col_name new_col_name语法允许使用一个命令重命名列。

于 2013-02-08T06:57:43.493 回答
1

更改列:当我们想要更改列名及其定义时使用。例如 - 改变表studentCHANGE name full_nameVARCHAR(32) NOT NULL;

修改列:当列名相同但其定义发生变化时使用。例如 - 更改表studentMODIFY full_nameVARCHAR(64) NOT NULL;

重命名列:当我们只需要更改列名时使用(其定义将相同) alter table studentRENAME COLUMN full_nameTO name;

于 2020-04-17T11:54:35.983 回答