修改列Vs更改列

时间:2013-02-08 06:47:10

标签: mysql alter-table

我知道,我们无法使用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的主要用途是什么?

以上问题被以下

取代

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

5 个答案:

答案 0 :(得分:53)

更改栏目 如果您已经创建了MySQL数据库,并且在您的某个列名称不正确之后做出决定,则无需删除它并进行替换,您只需使用更改列重命名

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

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

重命名列
ALTER TABLE MyTable MODIFY COLUMN foo VARCHAR(32) NOT NULL AFTER baz;

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

答案 1 :(得分:6)

区别在于您是要更改列名称,列定义还是同时更改两者。

更改

可以重命名列或更改其定义,或同时重命名。

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


您可以查看docs以获得完整的说明。

答案 2 :(得分:3)

在尝试将非auto_increment列设置为auto_increment超过一小时的努力后,我发现了一个区别 声明: alter table doctor_experience修改列id int(11)unsigned auto_increment 工作,但声明: alter table doctor_experience更改列id id int(11)unsigned auto_increment将报告错误。

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

更改列:当我们要更改列名称及其定义时使用。 例如-alter table student更改name full_name VARCHAR(32)NOT NULL;

修改列:当列名相同但定义更改时使用。 例如-alter table student修改full_name VARCHAR(64)NOT NULL;

重命名列:仅在需要更改列名称时使用(其定义将相同) 更改表student重命名列full_namename;