
3.5 修改数据表
修改表指的是修改数据库中已经存在的数据表的结构。Oracle使用ALTER TABLE语句修改表。常用的修改表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。本节将对和修改表有关的操作进行讲解。
3.5.1 修改表名
Oracle是通过ALTER TABLE语句来实现表名的修改的,具体的语法规则如下:

【例3.23】将数据表tb_dept3改名为tb_deptment3。
执行修改表名操作之前,使用数据库表tb_dept3。

使用ALTER TABLE将表tb_dept3改名为tb_deptment3,SQL语句如下:

语句执行之后,检验表tb_dept3是否改名成功。
使用DESC查看数据表tb_dept3是否还存在,结果如下:

使用DESC查看数据表tb_deptment3,结果如下:

经过比较可以看到,tb_dept3表已经改名为tb_deptment3表。
3.5.2 修改字段的数据类型
修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。在Oracle中修改字段数据类型的语法规则如下:

其中“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。
【例3.24】将数据表tb_dept1中name字段的数据类型由VARCHAR2(22)修改成VARCHAR2(30)。
执行修改表名操作之前,使用DESC查看tb_dept1表结构,结果如下:

可以看到现在name字段的数据类型为VARCHAR2(22),下面修改其类型。输入如下SQL语句并执行:

再次使用DESC查看表,结果如下:

语句执行之后,检验会发现表tb_dept1中name字段的数据类型已经修改成了VARCHAR2(30),修改成功。
3.5.3 修改字段名
Oracle中修改表字段名的语法规则如下:

其中,“旧字段名”指修改前的字段名,“新字段名”指修改后的字段名。
【例3.25】将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:

使用DESC查看表tb_dept1,会发现字段的名称已经修改成功,结果如下:

提示
由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录。因此,当数据库表中已经有数据时,不要轻易修改数据类型。
3.5.4 添加字段
随着业务需求的变化,可能需要在已经存在的表中添加新的字段。一个完整字段包括字段名、数据类型、完整性约束。添加字段的语法格式如下:

新字段名为需要添加的字段的名称。
1.添加无完整性约束条件的字段
【例3.26】在数据表tb_dept1中添加一个没有完整性约束的NUMBER类型的字段managerId(部门经理编号),SQL语句如下:

使用DESC查看表tb_dept1,会发现在表的最后添加了一个名为MANAGERID的NUMBER类型的字段,结果如下:

2.添加有完整性约束条件的字段
【例3.27】在数据表tb_dept1中添加一个不能为空的VARCHAR2(12)类型的字段column1,SQL语句如下:

使用DESC查看表tb_dept1,会发现在表的最后添加了一个名为column1的VARCHAR2(12)类型且不为空的字段,结果如下:

3.5.5 删除字段
删除字段是将数据表中的某个字段从表中移除,语法格式如下:

“字段名”指需要从表中删除的字段的名称。
【例3.28】删除数据表tb_dept1中的column1字段。
首先,执行删除字段之前,使用DESC查看tb_dept1表结构,结果如下:

删除column1字段,SQL语句如下:

再次使用DESC查看表tb_dept1,结果如下:

可以看到,tb_dept1表中已经不存在名称为column1的字段,删除字段成功。
提示
在删除表时,常常在列后添加CASCADE CIBSTRAINTS,目的是将与该列相关的约束一并删除掉。