我知道,我们不能使用
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
?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
命令。
区别在于您是否要更改列名称、列定义或两者。
可以更改列名称或定义,或两者都更改
ALTER TABLE t1 CHANGE a b BIGINT NOT NULL
可以更改列定义,但不能更改其名称
ALTER TABLE t1 MODIFY b INT NOT NULL
可以更改列名称,但不能更改其定义
ALTER TABLE t1 RENAME COLUMN b TO a
此外,
CHANGE
和 MODIFY
后面可以跟一个可选的 COLUMN
关键字。
完整解释:
经过一个多小时的努力,我发现了一个区别,试图将非 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
会报错。
那是一样的。这样做是为了支持另一种语法(据我所知,Oracle ALTER TABLE)。您可以同时使用它们。
注意:
ALTER TABLE CHANGE old_col_name new_col_name
语法允许使用一个命令重命名列。
更改列:当我们想要更改列名称及其定义时使用。 例如 - 更改表
student
更改 name
full_name
VARCHAR(32) NOT NULL;
修改列:当列名称相同但定义发生变化时使用。 例如 - 更改表
student
修改 full_name
VARCHAR(64) NOT NULL;
重命名列:当我们只需要更改列名称时使用(其定义相同) 更改表
student
重命名列 full_name
至 name
;
您可以使用更改语句更改列名称
更改表 x CHANGE COLUMN id emp_id VARCHAR(20) NULL;(您正在将列 id 更改为 emp_id)
修改语句不会更改列中的值,但会更改数据类型(例如,从 Text 更改为 DATE 等)
更改表 x 修改列 emp_date DATE;