`MODIFY COLUMN`与`CHANGE COLUMN`的区别

72

我知道,我们无法使用 MODIFY COLUMN 语法重命名列,但是我们可以使用 CHANGE COLUMN 语法来实现。

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

例如:

ALATER TABLE tablename CHANGE col1 col1 INT(10) NOT NULL;

取代

ALATER TABLE tablename MODIFY col1 INT(10) NOT NULL;

已编辑(问题更换)

  • MODIFY语法的主要用途是什么?
  • 为什么我们要使用CHANGE COLUMN而不是MODIFY COLUMN

3
因为这是mysql的创建者所决定的,我猜就是这样。 - Explosion Pills
1
可能是因为人们低估了命名事物的价值。 - Rafael Eyng
5个回答

100

更改列

如果您已经创建了MySQL数据库,并且事后发现其中某个列的命名不正确,您不需要将其删除并进行替换,可以直接使用更改列来重命名它。

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

修改列

MODIFY命令可以完成CHANGE COLUMN的所有功能,但不会重命名列。如果需要在MySQL中调整列大小,则可以使用MODIFY SQL命令。通过这样做,您可以允许比以前更多或更少的字符。不能使用MODIFY和其他命令来重命名列。

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

注意

ALTER TABLE 用于修改表格以更改列名、大小、删除列等。不能使用 CHANGE COLUMNMODIFY COLUMN 命令而不帮助 ALTER TABLE 命令。


FIRSTAFTER 是什么术语?它们是 SQL 中的关键字吗? - Kasun Siyambalapitiya
1
FIRST - 将位于表格最左侧的第一列;AFTER col_name - 该列将位于col_name列之后。 - Rozkalns
它特别适用于在不必重新输入列名的情况下,使用comment 'my comment'添加注释到列上。 - user4104817
关键字COLUMN在MODIFY语句中有什么作用?MySQL文档执行了相同的语句,但没有使用COLUMN关键字:https://dev.mysql.com/doc/refman/8.0/en/alter-table.html - theyuv

38
区别在于您是否想更改列名称、列定义或两者兼而有之。

CHANGE

可以更改列名称或定义,也可以同时更改两者。
ALTER TABLE t1 CHANGE a b BIGINT NOT NULL

MODIFY

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

RENAME COLUMN(从 MySQL 8.0 开始)

可以更改列名称但不能更改列定义。
ALTER TABLE t1 RENAME COLUMN b TO a
另外,`CHANGE` 和 `MODIFY` 可以在后面跟上可选的 `COLUMN` 关键字。 完整说明请参见:
  1. MySQL 5.7 文档- 重命名、重新定义和重新排序列
  2. MySQL 8.0 文档- 重命名、重新定义和重新排序列

4
最完整且简明的回答。 - user2340939
有一件事情需要注意 - 更改默认值:用于设置或删除列的默认值,例如 ALTER TABLE Foo ALTER COLUMN bar SET DEFAULT ‘hello world’; - user2340939
1
此外,CHANGEMODIFY 可以后跟一个可选的 COLUMN 关键字。 - user2340939

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 

将报告一个错误。


2

这是一样的。它是为了支持另一种语法(据我所知,Oracle ALTER TABLE)而完成的。你可以使用两种语法。

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


2

更改列名:用于根据其定义更改列名称。

例如- alter table student CHANGE name full_name VARCHAR(32) NOT NULL;

修改列:当列名相同但其定义需要更改时使用。

例如- alter table student MODIFY full_name VARCHAR(64) NOT NULL;

重命名列:仅需更改列名时使用(其定义将保持不变)。

例如- alter table student RENAME COLUMN full_name TO name;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接