`修改列`与`更改列`

问题描述 投票:0回答:6

我知道,我们不能使用

MODIFY COLUMN
语法重命名列,但我们可以使用
CHANGE COLUMN
语法。

我的问题是:

modify syntax
的主要用途是什么?

例如:

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

而不是

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


已编辑(问题被替换)

  • MODIFY
    语法的主要用途是什么?
  • 为什么我们必须使用
    CHANGE COLUMN
    而不是
    MODIFYCOLUMN
mysql alter-table
6个回答
106
投票

CHANGE COLUMN

如果您已经创建了 MySQL 数据库,并且在发现其中一列命名不正确后决定,则无需删除它并进行替换,您只需使用 更改列 即可将其重命名。

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

MODIFY COLUMN

此命令可以执行

CHANGE COLUMN
可以执行的所有操作,但无需重命名列。如果需要调整 MySQL 中列的大小,可以使用
MODIFY
SQL 命令。通过这样做,您可以允许比以前更多或更少的字符。您无法使用
MODIFY
等重命名列。

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

注意

ALTER TABLE
用于更改表,以更改列名称、大小、删除列等。如果没有
CHANGE COLUMN
命令的帮助,则无法使用
MODIFY COLUMN
ALTER TABLE
命令。


39
投票

区别在于您是否要更改列名称、列定义或两者。

改变

可以更改列名称或定义,或两者都更改

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


此外,

CHANGE
MODIFY
后面可以跟一个可选的
COLUMN
关键字。

完整解释:

  1. MySQL 5.7 文档 - 重命名、重新定义和重新排序列
  2. MySQL 8.0 文档 - 重命名、重新定义和重新排序列

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
投票

更改列:当我们想要更改列名称及其定义时使用。 例如 - 更改表

student
更改
name
full_name
VARCHAR(32) NOT NULL;

修改列:当列名称相同但定义发生变化时使用。 例如 - 更改表

student
修改
full_name
VARCHAR(64) NOT NULL;

重命名列:当我们只需要更改列名称时使用(其定义相同) 更改表

student
重命名列
full_name
name
;


0
投票

您可以使用更改语句更改列名称

更改表 x CHANGE COLUMN id emp_id VARCHAR(20) NULL;(您正在将列 id 更改为 emp_id)

修改语句不会更改列中的值,但会更改数据类型(例如,从 Text 更改为 DATE 等)

更改表 x 修改列 emp_date DATE;

© www.soinside.com 2019 - 2024. All rights reserved.