3.5 修改数据表 |
![]() |
修改数据表指的是修改数据库中已经存在的数据表的结构。Oracle使用ALTER TABLE语句修改数据表。常用的修改数据表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。本节将对与修改表有关的操作进行讲解。
Oracle是通过ALTER TABLE语句来实现表名的修改的,具体的语法规则如下:
ALTER TABLE <旧表名> RENAME TO <新表名>;
【例3.23】将数据表tb_dept3改名为tb_deptment3。
执行修改表名操作之前,查看数据表tb_dept3。
若要使用ALTER TABLE将数据表tb_dept3改名为tb_deptment3,可执行如下的SQL语句:
ALTER TABLE tb_dept3 RENAME TO tb_deptment3;
上述语句执行成功之后,检验表tb_dept3是否改名成功。
使用DESC查看数据表tb_dept3是否还存在,结果如下:
SQL> DESC tb_dept3; ERROR: ORA-04043: 对象tb_dept3 不存在
使用DESC查看数据表tb_deptment3,结果如下:
经过比较可以看到,tb_dept3表已经改名为tb_deptment3。
修改字段的数据类型就是把字段的数据类型转换成另一种数据类型。在Oracle中修改字段数据类型的语法规则如下:
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
其中“表名”指要修改数据类型的字段所在数据表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。
【例3.24】将数据表tb_dept1中name字段的数据类型由VARCHAR2(22)修改成VARCHAR2(30)。
执行修改字段数据类型操作之前,使用DESC查看tb_dept1的表结构,结果如下:
可以看到现在name字段的数据类型为VARCHAR2(22),下面修改其类型,执行如下的SQL语句:
ALTER TABLE tb_dept1 MODIFY name VARCHAR2(30);
再次使用DESC查看数据表,结果如下:
上述语句执行完成后,就会发现数据表tb_dept1中name字段的数据类型已经修改成了VARCHAR2(30)。
Oracle中修改数据表中字段名的语法规则如下:
ALTER TABLE <表名> RENAME COLUMN <旧字段名> TO<新字段名> ;
其中,“旧字段名”指修改前的字段名,“新字段名”指修改后的字段名。
【例3.25】若要将数据表tb_dept1中的location字段名改为loc,数据类型保持不变,可执行如下的SQL语句:
ALTER TABLE tb_dept1 RENAME COLUMN location TO loc ;
使用DESC查看表tb_dept1,会发现字段的名称已经修改成功,结果如下:
提 示
由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响数据表中已有的数据记录,因此,当数据库表中已经有数据时,不要轻易修改数据类型。
随着业务需求的变化,可能需要在已经存在的表中添加新的字段。一个完整字段包括字段名、数据类型、完整性约束。添加字段的语法格式如下:
ALTER TABLE <表名> ADD <新字段名> <数据类型>
新字段名为需要添加的字段的名称。
【例3.26】若要在数据表tb_dept1中添加一个没有完整性约束的NUMBER类型的字段managerId(部门经理编号),可执行如下的SQL语句:
ALTER TABLE tb_dept1 ADD managerId NUMBER(10);
使用DESC查看表tb_dept1,会发现在表的最后添加了一个名为managerId的NUMBER类型的字段,结果如下:
【例3.27】若要在数据表tb_dept1中添加一个不能为空的VARCHAR2(12)类型的字段column1,可执行如下的SQL语句:
ALTER TABLE tb_dept1 ADD column1 VARCHAR2(12) not null;
使用DESC查看表tb_dept1,会发现在该表的最后添加了一个名为column1的VARCHAR2(12)类型且不为空的字段,结果如下:
删除字段是将某个字段从数据表中移除,语法格式如下:
ALTER TABLE <表名> DROP COLUMN <字段名>;
“字段名”是指需要从数据表中删除的字段的名称。
【例3.28】删除数据表tb_dept1中的column1字段。
首先,执行删除字段之前,使用DESC查看tb_dept1的表结构,结果如下:
若要删除column1字段,可执行如下的SQL语句:
ALTER TABLE tb_dept1 DROP COLUMN column1;
再次使用DESC查看表tb_dept1,结果如下:
可以看到,表tb_dept1中已经不存在名称为column1的字段,删除字段成功。
提 示
在删除表中字段时,常常在字段后添加CASCADE CIBSTRAINTS,目的是将与该字段相关的约束一并删除。