@yanglt7
2018-06-06T06:42:29.000000Z
字数 4029
阅读 1043
MySQL
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。
mysql> create table testalter_tbl-> (-> i INT,-> c CHAR(1)-> );mysql> show columns from testalter_tbl;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| i | int(11) | YES | | NULL | || c | char(1) | YES | | NULL | |+-------+---------+------+-----+---------+-------+
mysql> alter table testalter_tbl drop i;
mysql> alter table testalter_tbl add i int;
mysql> show columns from testalter_tbl;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| c | char(1) | YES | | NULL | || i | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+
mysql> alter table testalter_tbl drop i;mysql> alter table testalter_tbl add i int first;mysql> show columns from testalter_tbl;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| i | int(11) | YES | | NULL | || c | char(1) | YES | | NULL | |+-------+---------+------+-----+---------+-------+mysql> alter table testalter_tbl drop i;mysql> alter table testalter_tbl add i int after c;mysql> show columns from testalter_tbl;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| c | char(1) | YES | | NULL | || i | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+
如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
mysql> alter table testalter_tbl modify c char(10);
mysql> alter table testalter_tbl change i j bigint;mysql> alter table testalter_tbl change j j int;mysql> show columns from testalter_tbl;+-------+----------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+----------+------+-----+---------+-------+| c | char(10) | YES | | NULL | || j | int(11) | YES | | NULL | |+-------+----------+------+-----+---------+-------+
当你修改字段时,你可以指定是否包含或者是否设置默认值。
以下实例,指定字段 j 为 NOT NULL 且默认值为100 。
mysql> alter table testalter_tbl modify j bigint not null default 100;mysql> show columns from testalter_tbl;+-------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------+------+-----+---------+-------+| c | char(10) | YES | | NULL | || j | bigint(20) | NO | | 100 | |+-------+------------+------+-----+---------+-------+
如果你不设置默认值,MySQL会自动设置该字段默认为 NULL。
mysql> alter table testalter_tbl alter j set default 1000;mysql> show columns from testalter_tbl;+-------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------+------+-----+---------+-------+| c | char(10) | YES | | NULL | || j | bigint(20) | NO | | 1000 | |+-------+------------+------+-----+---------+-------+
mysql> alter table testalter_tbl alter j drop default;mysql> show columns from testalter_tbl;+-------+------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------+------+-----+---------+-------+| c | char(10) | YES | | NULL | || j | bigint(20) | NO | | NULL | |+-------+------------+------+-----+---------+-------+
mysql> show table status like 'testalter_tbl'\G*************************** 1. row ***************************Name: testalter_tblEngine: MyISAMVersion: 10Row_format: FixedRows: 0Avg_row_length: 0Data_length: 0Max_data_length: 10977524091715583Index_length: 1024Data_free: 0Auto_increment: NULLCreate_time: 2017-08-11 10:27:27Update_time: 2017-08-11 10:27:27Check_time: NULLCollation: utf8_general_ciChecksum: NULLCreate_options:Comment:
如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。
尝试以下实例将数据表 testalter_tbl 重命名为 alter_tbl:
mysql> alter table testalter_tbl rename to alter_tbl;