@yanglt7
2018-06-06T06:42:29.000000Z
字数 4029
阅读 951
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_tbl
Engine: MyISAM
Version: 10
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 10977524091715583
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2017-08-11 10:27:27
Update_time: 2017-08-11 10:27:27
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。
尝试以下实例将数据表 testalter_tbl 重命名为 alter_tbl:
mysql> alter table testalter_tbl rename to alter_tbl;