4.5 修改表

修改表是指修改数据库中已存在的表的定义。修改表比重新定义表简单,不需要重新加载数据,也不会影响正在进行的服务。MySQL中通过ALTER TABLE语句来修改表。修改表包括修改表名、修改字段数据类型、修改字段名、增加字段、删除字段等。

4.5.1 修改表名——使用RENAME

数据库系统通过表明来区分不同的表,表名可以在同一个数据库中唯一标识一张表。例如,数据库school中有t_class表,t_class表就是唯一的,在同一个数据库中不可能存在另一个名为t-class的表。在MySQL中,修改表名是通过SQL语句ALTER TABLE实现的,其语法形式如下:

     ALTER TABLE oldTablename RENAME [TO] newTablename

上述语句中,oldTablename参数表示所要修改表的名字,newTablename参数表示修改后的新表名,要操作的表对象必须在数据库中已经存在。

【示例4-6】执行SQL语句ALTER TABLE,修改数据库school中t_class表的名称为tab_class,具体步骤如下:

步骤01 执行SQL语句USE,选择数据school,再修改表t_class的名字为tab_class,具体SQL语句如下:

     USE school;
     ALTER TABLE t_class RENAME tab_class;

执行结果如图4-31所示。

步骤02 为了检验数据school中是否已经把表t_class的名称修改为tab_class,执行SQL语句DESCRIBE,具体SQL语句如下:

     DESCRIBE t_class;
     DESCRIBE tab_class;

执行结果如图4-32所示。

图4-31 选择数据库并修改表的名字

图4-32 查看表信息

从图4-32中可以看出,表t_class已经不存在,表tab_class取而代之。

4.5.2 修改表名——通过SQLyog

在客户端软件SQLyog中,不仅可以在“询问”窗口中执行ALTER TABLE语句来修改表,也可以通过向导来实现。下面主要介绍在SQLyog中如何通过向导来实现修改表名。

步骤01 在“对象资源管理器”窗口中,右击数据库school中表t_class的节点,从弹出的快捷菜单中选择“改变表”命令,如图4-33所示。

步骤02 打开表t_class的编辑窗口,如图4-34所示。

图4-33 选择“改变表”命令

图4-34 表t_class的编辑窗口

步骤03 在“表名称”中,填写新的表名,单击“保存”按钮,就能成功修改表名,如图4-35所示。

图4-35 成功表名修改

4.5.3 增加字段——在表的最后一个位置增加

在创建表时,表中的字段就已经定义完成了。如果要增加新的字段,可以通过ALTER TABLE语句进行增加。字段就是表中的列,是由字段名和数据类型进行定义的。

MySQL数据库管理系统中通过以下SQL语句来实现新增字段:

     ALTER TABLE tablename ADD propName propType;

上述语句中,tablename参数表示所要修改表的名字,propName参数为所要增加字段的名称,propType为所要增加字段存储数据的数据类型。如果该语句执行成功,字段就会增加到所有字段的最后一个位置。

【示例4-7】执行SQL语句ALTER TABLE,为数据库school中的t_class表增加一个名为advisor、类型为VARCHAR的字段,并且新增字段要加在最后一列,具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,具体SQL语句如下:

     USE school;

然后查看已经存在的表t_class的定义信息,SQL语句如下:

     DESCRIBE t_class;

执行结果如图4-36所示。

步骤02 执行SQL语句ALTER TABLE,增加一个名为advisor的字段,具体SQL语句如下:

     ALTER TABLE t_class ADD advisor VARCHAR(20);

执行结果如图4-37所示。

图4-36 选择数据库,查看表定义

图4-37 添加字段

步骤03 执行DESCRIBE语句检验t_class表中是否已经添加了advisor字段,SQL语句如下:

     DESCRIBE t_class;

执行结果如图4-38所示。

图4-38 查看表信息

把图4-38和图4-36相比,表t_class最后一个位置多出了一个advisor字段。

4.5.4 增加字段——在表的第一个位置增加

通过SQL语句ALTER TABLE来实现新增字段时,如果不想让所增加的字段在所有字段的最后一个位置,可以通过FIRST关键字使得所增加的字段位于所有字段的第一个位置,具体的SQL语句如下:

     ALTER TABLE tablename ADD propName propType FIRST;

在上述语句中,多了一个关键字FIRST,表示字段在表中的第一个位置。

【示例4-8】执行SQL语句ALTER TABLE,在数据库school中的t_class表的第一个位置增加一个名称为advisor、类型为VARCHAR的字段,所增加的字段在表所有字段的第一个位置,具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,具体SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-39和图4-40所示。

图4-39 选择数据库

图4-40 查看表信息

步骤02 执行SQL语句ALTER TABLE,增加一个名为advisor的字段,具体SQL语句如下:

     ALTER TABLE t_class ADD advisor VARCHAR(20) FIRST;

执行结果如图4-41所示。

步骤03 为了检验数据库school的表t_class中是否添加了advisor字段,执行SQL语句DESCRIBE,具体SQL语句如下:

     DESCRIBE t_class;

执行结果如图4-42所示。

图4-41 添加字段

图4-42 查看表信息

图4-42的执行结果显示,和图4-40相比,表t_class已经增加了一个名为advisor的字段,并且该字段在表的第一个位置,即增加字段成功。

4.5.5 增加字段——在表的指定字段之后增加

通过SQL语句ALTER TABLE来实现新增字段时,除了可以在表的第一个位置或最后一个位置增加字段外,还可以通过关键字AFTER在指定的字段之后添加字段,具体的SQL语句语法形式如下:

     ALTER TABLE tablename ADD pNameNew propType AFTER pNameOld;

在上述语句中,pNameNew参数表示新增的字段名,pNameOld参数表示已经存在的字段名,多了一个关键字AFTER,pNameNew的位置将在pNameOld之后。

【示例4-9】执行SQL语句ALTER TABLE,为数据库school中的t_class增加一个名称为advisor、类型为VARCHAR的字段,所增加的字段在cname位置之后,具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,具体SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-43和图4-44所示。

图4-43 选择数据库

图4-44 查看表信息

步骤02 为t_class表增加一个名为advisor的字段,SQL语句如下:

     ALTER TABLE t_class ADD advisor VARCHAR(20) AFTER cname;

执行结果如图4-45所示。

步骤03 检验数据school的表t_class中是否添加了advisor字段,具体SQL语句如下:

     ALTER TABLE t_class ADD advisor VARCHAR(20) ALTER cname;

执行结果如图4-46所示。

图4-45 添加字段

图4-46 查看表信息

从图4-46中可以看出,与图4-44相比,表t_class中已经新增了一个名为advisor的字段,并且该字段的位置在字段cname之后。

4.5.6 增加字段——通过SQLyog

在客户端软件SQLyog中,不仅可以在“询问”窗口中执行ALTER TABLE语句来增加字段,也可以通过向导来实现。下面介绍在SQLyog中如何通过向导来实现新增字段。

步骤01 在“对象资源管理器”窗口中,右击数据库school中表t_class的节点,从弹出的快捷菜单中选择“改变表”命令,如图4-47所示。

步骤02 打开编辑表的窗口,如图4-48所示。

图4-47 选择“改变表”命令

图4-48 编辑表的窗口

步骤03 在“1列”选项卡中,是表t_class的所有字段定义,单击最后的空白行就可以在最后添加新的字段properNew1;单击选择第一个字段classno,再单击“+”按钮,就可以在classno之前(也就是第一行)新增字段properNew2;单击选择字段cname,再单击“+”按钮,就可以在cname之前新增字段properNew3。

4.5.7 删除字段——使用DROP

对于表,既然可以在修改表时进行字段的增加操作,就可以在修改表时进行字段的删除操作。所谓删除字段,是指删除已经在表中定义好的某个字段,即在创建好的表格中发现某个字段需要删除。在MySQL数据库管理系统中,删除字段通过SQL语句ALTER TABLE来实现,其语法形式如下:

     ALTER TABLE tablename DROP propName;

在上述语句中,tablename参数表示所要修改表的名字,propName表示要删除字段的名字。

【示例4-10】执行SQL语句ALTER TABLE,为数据库school中的t_class表删除名为cname、类型为VARCHAR的字段,具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-49和图4-50所示。

图4-49 选择数据库

图4-50 查看表信息

步骤02 删除t_class表中名为cname的字段,再检验t_class表是否已经删除了cname字段,具体SQL语句如下:

     ALTER TABLE t_class DROP cname;
     DESCRIBE t_class;

执行结果如图4-51和图4-52所示。

图4-51 删除字段

图4-52 查看表信息

从图4-52可以看出,表t_class中的cname字段已经被删除。

4.5.8 删除字段——通过SQLyog

在客户端软件SQLyog中,不仅可以在“询问”窗口中执行ALTER TABLE语句来删除字段,也可以通过向导来实现。下面介绍在SQLyog中如何通过向导来实现删除字段。

步骤01 在“对象资源管理器”窗口中,右击数据库school中表t_class的节点,从弹出的快捷菜单中选择“改变表”命令,如图4-53所示。

图4-53 选择“改变表”命令

步骤02 打开编辑表的窗口,如图4-54所示。

图4-54 编辑表的窗口

步骤03 在“1列”中选择cname一行,再单击“-”按钮,删除字段cname,会弹出一个提示框,如图4-55所示。

步骤04 单击“是”按钮,表t_class中的cname字段即可被删除,如图4-56所示。

图4-55 是否删除字段

图4-56 表中的字段删除成功

4.5.9 修改字段——修改数据类型

根据创建表的语法可以发现,字段是由字段名和数据类型来进行定义的,如果要实现修改字段,除了可以修改字段名外,还可以修改字段所能存储的数据类型。由于一个表中拥有许多字段,因此还可以实现修改字段的顺序。

在MySQL中,ALTER TABLE语句也可以修改字段的数据类型,其基本语法如下:

     ALTER TABLE tablename MODIFY propName propType;

上述语句中,tablename参数表示所要修改表的名字,propName参数为所修改字段的名称,propType为字段propName修改后的类型。

【示例4-11】执行SQL语句ALTER TABLE,在数据库school的表t_class中,将字段classno的类型从INT修改成VARCHAR(20),具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,具体SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-57和图4-58所示。

图4-57 选择数据库

图4-58 查看表信息

步骤02 执行SQL语句ALTER TABLE,修改classno字段的类型为VARCHAR(20);再检验t_class表中的字段classno的类型是否修改为VARCHAR(20),具体SQL语句如下:

     ALTER TABLE t_class MODIFY classno VARCHAR(20);
     DESCRIBE t_class;

执行结果如图4-59和图4-60所示。

图4-59 修改字段

图4-60 查看表定义

从图4-60中可以看出,表t_class中的字段classno的类型已经修改为VARCHAR(20)。

4.5.10 修改字段——修改字段的名字

在MySQL中,ALTER TABLE语句也可以修改字段的名称,其基本语法如下:

     ALTER TABLE tablename CHANGE pNameOld pNameNew pTypeOld;

上述语句中,tablename参数表示所要修改表的名字,pNameOld参数为所修改字段的名称,pNameNew为修改后的字段名,pTypeOld为字段pNameOld的数据类型。

【示例4-12】执行SQL语句ALTER TABLE,在数据库school的表t_class中,将字段classno的名称修改成classid,具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,具体SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-61和图4-62所示。

图4-61 选择数据库

图4-62 查看表信息

步骤02 修改t_class表的字段classno的名称为classid;检验t_class表中字段classno的名称是否已修改为classid,具体SQL语句如下:

     ALTER TABLE t_class CHANGE classno classid INT;
     DESCRIBE t_class;

执行结果如图4-63和图4-64所示。

图4-63 修改字段名称

图4-64 查看表信息

从图4-64中可以看出,t_class表中已经不存在classno字段,字段名称已修改为classid。

4.5.11 修改字段——同时修改字段的名字和类型

在MySQL中,ALTER TABLE语句也可以同时修改字段的名称和类型,其基本语法如下:

     ALTER TABLE tablename CHANGE pNameOld pNameNew pTypeNew;

上述语句中,tablename参数表示所要修改表的名字,pNameOld参数为所修改字段的名称,pNameNew为修改后的字段名,pTypeNew为字段pNameNew的数据类型。

【示例4-13】执行SQL语句ALTER TABLE,在数据库school的表t_class中,将字段classno的名称修改成classid VARCHAR(40),具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,具体SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-65和图4-66所示。

图4-65 选择数据库

图4-66 查看表信息

步骤02 执行SQL语句ALTER TABLE,修改名为classno的字段,具体SQL语句如下:

     ALTER TABLE t_class CHANGE classno classid VARCHAR(40);

执行结果如图4-67所示。

步骤03 为了检验数据库school中的表t_class中的字段classno INT是否已经修改成classid VARCHAR(40),执行SQL语句DESCRIBE,具体SQL语句如下:

     DESCRIBE t_class;

执行结果如图4-68所示。

图4-67 修改表字段的名称和类型

图4-68 查看表信息

从图4-68可以看出,和表4-66相比,表t_class中已经不存在字段classno INT,该字段已经修改为classid VARCHAR(40),字段的名称和类型同时被修改了。

4.5.12 修改字段——修改字段的顺序

在MySQL中,ALTER TABLE语句也可以同时修改字段的名称顺序,其基本语法如下:

     ALTER TABLE tablename MODIFY pName1 propType FIRST|AFTER pName2;

上述语句中,tablename参数表示所要修改表的名字,pName1参数为所要调整顺序的字段名称,FIRST参数表示将字段调整到表的第一个位置,AFTER pName2参数表示将字段调整到pName2字段位置之后。

【示例4-14】执行SQL语句ALTER TABLE,在数据库school的表t_class中,将字段classno的名称修改成classid VARCHAR(40),具体步骤如下:

步骤01 执行SQL语句USE,选择数据库school,然后查看已经存在的表t_class的定义信息,具体SQL语句如下:

     USE school;
     DESCRIBE t_class;

执行结果如图4-69和图4-70所示。

图4-69 选择数据库

图4-70 查看表信息

步骤02 将t_class表的字段classno调整到字段cname之后,再查看t_class表的信息,具体SQL语句如下:

     ALTER TABLE t_class MODIFY classno INT AFTER cname;
     DESCRIBE t_class;

执行结果如图4-71和图4-72所示。

图4-71 修改字段顺序

图4-72 查看表定义

从图4-72中可以看出,表t_class中的字段classno的位置已经调整到字段cname之后。

4.5.13 修改字段——通过SQLyog

在客户端软件SQLyog中,不仅可以在“询问”窗口中执行ALTER TABLE语句来修改字段,也可以通过向导来实现。下面介绍在SQLyog中如何通过向导来实现修改字段。

步骤01 在“对象资源管理器”窗口中,右击数据库school中表t_class的节点,从弹出的快捷菜单中选择“改变表”命令,如图4-73所示。

图4-73 选择“改变表”命令

步骤02 打开编辑表的窗口,如图4-74所示,双击字段的名称,就可以编辑字段,把字段classno的名称改成classid。

图4-74 编辑表的窗口

步骤03 在“数据类型”一栏中,单击下拉框,可以修改字段的数据类型,如图4-75所示,把字段classid的数据类型从原来的INT改成VARCHAR。

步骤04 在“长度”一栏双击数字,可以编辑字段的长度,如图4-76所示。

图4-75 修改字段的数据类型

图4-76 修改字段的数据长度

步骤05 选择字段classid一行,单击“上移”或者“下移”按钮,可以修改字段的位置,如图4-77所示。

图4-77 修改字段的位置