4.3.4 添加字段
随着业务需求的变化,可能需要在已经存在的表中添加新的字段。一个完整字段包括字段名,数据类型,完整性约束。添加字段的语法格式如下:
ALTER TABLE <表名> ADD <新字段名> <数据类型>
[约束条件] [FIRST | AFTER 已存在字段名];
新字段名为需要添加的字段的名称;“FIRST”为可选参数,其作用是将新添加的字段设置为表的第一个字段;“AFTER”为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的后面。
1.添加无完整性约束条件的字段
【例4.17】在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerId(部门经理编号),SQL语句如下:
ALTER TABLE tb_dept1 ADD managerId INT(10);
使用DESC查看表tb_dept1,会发现在表的最后添加了一个名为managerId的INT类型的字段,结果如下:
mysql> DESC tb_dept1;
+-------------+-----------------+----------+--------+-------------+--------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+----------+--------+-------------+--------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
+-------------+----------------+-----------+--------+-------------+--------+
4 rows in set (0.03 sec)
2.添加有完整性约束条件的字段
【例4.18】在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:
ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null;
使用DESC查看表tb_dept1,会发现在表的最后添加了一个名为column1的VARCHAR(12)类型且不为空的字段,结果如下:
mysql> DESC tb_dept1;
+-------------+-----------------+----------+--------+-------------+--------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+----------+--------+-------------+--------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+--------------+----------------+-----------+--------+-------------+--------+
5 rows in set (0.00 sec)
3.在表的第一列添加一个字段
【例4.19】在数据表tb_dept1中添加一个INT类型的字段column2,SQL语句如下:
ALTER TABLE tb_dept 1ADD column2 INT(11) FIRST;
使用DESC查看表tb_dept1,会发现在表第一列添加了一个名为column2的INT(11)类型字段,结果如下:
mysql> DESC tb_dept1;
+-------------+-----------------+----------+--------+-------------+--------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+----------+--------+-------------+--------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+--------------+----------------+-----------+--------+-------------+--------+
6 rows in set (0.00 sec)
4.在表的指定列之后添加一个字段
【例4.20】在数据表tb_dept1中name列后添加一个INT类型的字段column3,SQL语句如下:
ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name;
使用DESC查看表tb_dept1,结果如下:
mysql> DESC tb_dept1;
+-------------+-----------------+----------+--------+-------------+--------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------+----------+--------+-------------+--------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+--------------+----------------+-----------+--------+-------------+--------+
7 rows in set (0.03 sec)
可以看到,tb_dept1表中增加了一个名称为column3的字段,其位置在指定的name字段后面,添加字段成功。
4.3.5 删除字段
删除字段是将数据表中的某个字段从表中移除,语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
“字段名”指需要从表中删除的字段的名称。
【例4.21】删除数据表tb_dept1表中的column2字段。
首先,执行删除字段之前,使用DESC查看tb_dept1表结构,结果如下:
mysql> DESC tb_dept1;
+-------------+-----------------+----------+--------+-------------+--------+
| Field | Type | Null | Key | Default | Extr |
+-------------+-----------------+----------+--------+-------------+--------+
| column2 | int(11) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+--------------+----------------+-----------+--------+-------------+--------+
6 rows in set (0.03 sec)
删除column2字段,SQL语句如下:
ALTER TABLE tb_dept1 DROP column2;
再次使用DESC查看表tb_dept1,结果如下:
mysql> DESC tb_dept1;
+-------------+-----------------+----------+--------+-------------+--------+
| Field | Type | Null | Key | Default | Extr |
+-------------+-----------------+----------+--------+-------------+--------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| column3 | int(11) | YES | | NULL | |
| location | varchar(60) | YES | | NULL | |
| managerId | int(10) | YES | | NULL | |
| column1 | varchar(12) | NO | | NULL | |
+--------------+----------------+-----------+--------+-------------+--------+
6 rows in set (0.03 sec)
可以看到,tb_dept1表中已经不存在名称为column2的字段,删除字段成功。