
3.7 修改表
修改表是指修改数据库中已存在的表的定义。修改表比重新定义表简单,不需要重新加载数据,也不会影响正在进行的服务。MySQL中通过ALTER TABLE语句来修改表。修改表包括修改表名、修改字段数据类型、修改字段名、增加字段、删除字段等。
3.7.1 修改表名
数据库系统通过表名来区分不同的表,表名可以在同一个数据库中唯一标识一张表。例如,数据库school中有t_class表,那么t_class表就是唯一的,在同一个数据库中不可能存在另一个名为t_class的表。在MySQL中,修改表名是通过SQL语句ALTER TABLE实现的,其语法形式如下:
ALTER TABLE oldTablename RENAME [TO] newTablename
在上述语句中,oldTablename参数表示所要修改表的名字,newTablename参数表示修改后的新表名,要操作的表对象必须在数据库中已经存在。
【示例3-14】执行SQL语句ALTER TABLE,修改数据库school中t_class表的名称为tab_class。具体步骤如下:
(1)修改表t_class的名字为tab_class,具体SQL语句如下,执行结果如图3-37所示。
ALTER TABLE t_class RENAME tab_class;
(2)为了检验数据在school中是否已经修改表t_class为tab_class表,执行SQL语句DESCRIBE,具体SQL语句如下,执行结果如图3-38所示。
DESCRIBE t_class; DESCRIBE tab_class;

图3-37 选择数据库并修改表的名字

图3-38 查看表信息
从图3-38中可以看出,表t_class已经不存在,表tab_class取而代之。
3.7.2 增加字段
在创建表时,表中的字段就已经定义完成。如果要增加新的字段,可以通过ALTER TABLE语句进行增加。字段就是表中的列,是由字段名和数据类型进行定义的。
MySQL数据库管理系统中通过以下SQL语句来实现新增字段。
ALTER TABLE tablename ADD propName propType; ALTER TABLE tablename ADD propName propType FIRST; ALTER TABLE tablename ADD pNameNew propType AFTER pNameOld;
- 第一条语句中,tablename参数表示所要修改表的名字,propName参数为所要增加字段的名称,propType为所要增加字段存储数据的数据类型。如果该语句执行成功,字段将会增加到所有字段的最后一个位置。
- 第二条语句中,多了一个关键字FIRST,表示字段在表中的第一个位置。
- 第三条语句中,pNameNew参数表示新增的字段名,pNameOld参数表示已经存在的字段名,多了一个关键字AFTER,pNameNew的位置将在pNameOld之后。
以下三个示例中添加的字段名相同,为保证顺利学习,实际操作完一个示例后可参考3.7.3节先删除该字段,再继续下一示例。
【示例3-15】执行SQL语句ALTER TABLE,为数据库school中t_class表增加一个名为advisor、类型为VARCHAR的字段,并且新增字段要加在最后一列。具体步骤如下:
(1)查看已经存在的表t_class的定义信息,SQL语句如下,执行结果如图3-39所示。
DESCRIBE t_class;
(2)执行SQL语句ALTER TABLE,增加一个名为advisor的字段,具体SQL语句如下,执行结果如图3-40所示。
ALTER TABLE t_class ADD advisor VARCHAR(20);

图3-39 选择数据库并查看表定义

图3-40 添加字段
(3)执行DESCRIBE语句检验t_class表中是否已经添加advisor字段,SQL语句如下,执行结果如图3-41所示。
DESCRIBE t_class;

图3-41 查看表信息
从图3-41中可以看出,和图3-39相比,表t_class最后一个位置多出一个advisor字段。
【示例3-16】执行SQL语句ALTER TABLE,为数据库school中t_class表的第一个位置增加一个名称为advisor、类型为VARCHAR的字段,所增加的字段在表所有字段的第一个位置。具体步骤如下:
(1)查看已经存在的表t_class的定义信息,具体SQL语句如下,执行结果如图3-42所示。
DESCRIBE t_class;

图3-42 查看表信息
(2)执行SQL语句ALTER TABLE,增加一个名为advisor的字段,具体SQL语句如下,执行结果如图3-43所示。
ALTER TABLE t_class ADD advisor VARCHAR(20) FIRST;
(3)为了检验数据school中表t_class中是否添加advisor字段,执行SQL语句DESCRIBE,具体SQL语句如下,执行结果如图3-44所示。
DESCRIBE t_class;

图3-43 添加字段

图3-44 查看表信息
图3-44的执行结果显示,和图3-42相比,表t_class已经增加了一个名为advisor的字段,并且该字段还在表的第一个位置,即增加字段成功。
【示例3-17】执行SQL语句ALTER TABLE,为数据库school中t_class增加一个名称为advisor、类型为VARCHAR的字段,所增加的字段在cname位置之后。具体步骤如下:
(1)查看已经存在的表t_class的定义信息,具体SQL语句如下,执行结果如图3-45所示。
DESCRIBE t_class;

图3-45 查看表信息
(2)为t_class表增加一个名为advisor的字段,SQL语句如下,执行结果如图3-46所示。
ALTER TABLE t_class ADD advisor VARCHAR(20) AFTER cname;
(3)检验数据school中表t_class中是否添加advisor字段,具体SQL语句如下,执行结果如图3-47所示。

图3-46 添加字段

图3-47 查看表信息
从图3-47中可以看出,与图3-45相比,表t_class中已经新增了一个名为advisor的字段,并且该字段的位置在字段cname之后。
3.7.3 删除字段
对于表,既可以在修改表时进行字段的增加操作,也可以在修改表时进行字段的删除。所谓删除字段,是指删除已经在表中定义好的某个字段,即在创建好的表格中发现某个字段需要删除。在MySQL数据库管理系统中,删除字段通过SQL语句ALTER TABLE来实现,其语法形式如下:
ALTER TABLE tablename DROP propName;
上述语句中,tablename参数表示所要修改表的名字,propName表示要删除字段的名字。
【示例3-18】执行SQL语句ALTER TABLE,为数据库school中t_class表删除名为cname、类型为VARCHAR的字段。具体步骤如下:
(1)查看已经存在的表t_class的定义信息,SQL语句如下,执行结果如图3-48所示。
DESCRIBE t_class;

图3-48 查看表信息
(2)删除t_class表中名为cname的字段,再检验t_class表是否已经删除了cname字段,具体SQL语句如下,执行结果如图3-49、图3-50所示。
ALTER TABLE t_class DROP cname; DESCRIBE t_class;

图3-49 删除字段

图3-50 查看表信息
从图3-50可以看出,表t_class中的cname字段已经被删除。
3.7.4 修改字段
根据创建表的语法可以发现,字段是由字段名和数据类型来进行定义的。如果要实现修改字段,除了可以修改字段名外,还可以实现修改字段所能存储的数据类型。由于一个表中拥有许多字段,因此还可以实现修改字段的顺序。
在MySQL中,ALTER TABLE语句可实现修改字段的操作,其基本语法如下:
ALTER TABLE tablename MODIFY propName propType; ALTER TABLE tablename CHANGE pNameOld pNameNew pTypeOld; ALTER TABLE tablename CHANGE pNameOld pNameNew pTypeNew; ALTER TABLE tablename MODIFY pName1 propType FIRST|AFTER pName2;
- 第一条语句用于修改字段类型。其中,tablename参数表示所要修改表的名字,propName参数为所修改字段的名称,propType为字段propName修改后的类型。
- 第二条语句用于修改字段的名称。其中pNameOld参数为所修改字段的名称,pNameNew为修改后的字段名,pTypeOld为字段pNameOld的数据类型。
- 第三条语句用于同时修改字段名称和类型。其中,pTypeNew为字段pNameNew的数据类型。
- 第四条语句用于修改字段的顺序。其中,tablename参数表示所要修改表的名字,pName1参数为所要调整顺序的字段名称,FIRST参数表示将字段调整到表的第一个位置,“AFTER pName2”参数表示将字段调整到pName2字段位置之后。
以下示例重点演示如何同时修改字段类型、名称以及字段顺序,其他语句请读者根据语法自行操作。
【示例3-19】执行SQL语句ALTER TABLE,在数据库school的表t_class中将字段classno的名称修改成classid VARCHAR(40)。具体步骤如下:
(1)查看已经存在的表t_class的定义信息,具体SQL语句如下,执行结果如图3-51所示。
DESCRIBE t_class;

图3-51 查看表信息
(2)执行SQL语句ALTER TABLE,修改名为classno的字段,具体SQL语句如下,执行结果如图3-52所示。
ALTER TABLE t_class CHANGE classno classid VARCHAR(40);
(3)为了检验数据库school中的表t_class中字段classno INT是否已经修改成classid VARCHAR(40),执行SQL语句DESCRIBE,具体如下,执行结果如图3-53所示。
DESCRIBE t_class;

图3-52 修改表字段的名称和类型

图3-53 查看表信息
从图3-53可以看出,和图3-51相比,表t_class中已经不存在字段classno INT,该字段已经修改称为classid VARCHAR(40),字段的名称和类型被同时修改了。
【示例3-20】执行SQL语句ALTER TABLE,在数据库school的表t_class中将字段classno调整到字段cname之后。具体步骤如下:
(1)查看已经存在的表t_class的定义信息,具体SQL语句如下,执行结果如图3-54所示。
DESCRIBE t_class;

图3-54 查看表信息
(2)将t_class表的字段classno调整到字段cname之后,再查看t_class表信息,具体SQL语句如下,执行结果如图3-55、图3-56所示。
ALTER TABLE t_class MODIFY classno INT AFTER cname; DESCRIBE t_class;

图3-55 修改字段顺序

图3-56 查看表定义
从图3-56中可以看出,表t_class中的字段classno的位置已经调整到字段cname之后。