我知道,我们无法使用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
的主要用途是什么?
以上问题被以下
取代为什么我们必须使用更改列而不是修改列?
答案 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_name
至name
;