
4.2 修改数据表
修改表指的是修改数据库中已经存在的数据表的结构。常用的修改表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。本节将对和修改表有关的操作进行讲解。
4.2.1 修改表名
在对象浏览器中修改表名的方法比较简单,选择需要修改名称的数据表右击,在弹出的快捷菜单中选择【属性】菜单命令,即可在弹出的对话框中修改数据表的名称,单击【保存】按钮即可,如图4-24所示。
PostgreSQL是通过ALTER TABLE语句来实现表名修改的,具体的语法规则如下:
ALTER TABLE <旧表名> RENAME TO <新表名>;
【例4.11】将数据表tb_dept3改名为tb_department3。
使用ALTER TABLE将表tb_dept3改名为tb_department3,SQL语句如下:
ALTER TABLE tb_dept3 RENAME TO tb_department3;
语句执行之后,检验表tb_dept3是否改名成功。在对象浏览器中执行刷新操作,即可看到数据表的名称已修改,如图4-25所示。

图4-24 【表 - tb_dept3】对话框

图4-25 修改数据表的名称
提 示
读者可以在修改表名称时查看修改前后两个表的结构。修改表名并不修改表的结构,因此修改名称后的表和修改名称前的表的结构必然是相同的。
4.2.2 修改字段的数据类型
对于创建好的字段,用户可以修改它的数据类型。使用SQL语言可以修改字段的数据类型。修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。在PostgreSQL中修改字段数据类型的语法规则如下:
ALTER TABLE <表名> ALTER COLUMN <字段名> TYPE <数据类型>
其中,“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。
【例4.12】将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。
输入如下SQL语句并执行:

在对象浏览器中选择tb_dept1数据表的【name】字段,执行刷新操作,然后右击并在弹出的快捷菜单中选择【属性】菜单命令,即可在弹出的对话框中看到数据类型发生了变化,如图4-26所示。

图4-26 查看数据类型
提 示
由于不同类型的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录,因此当数据库表中已经有数据时,不要轻易修改数据类型。
4.2.3 修改字段名
使用对象浏览修改字段名的方法比较简单,只需要在字段属性对话框中修改即可。下面讲述如何使用SQL语句实现修改字段名。
在PostgreSQL中修改表字段名的语法规则如下:
ALTER TABLE <表名> RENAME <旧字段名> TO <新字段名> <新数据类型>;
其中,“旧字段名”指修改前的字段名;“新字段名”指修改后的字段名;“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,将新数据类型设置成与原来一样即可,但数据类型不能为空。
【例4.13】将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:
ALTER TABLE tb_dept1 RENAME location TO loc;
命令执行后,选择【列】节点后刷新,即可看到字段的名称发生了变化,如图4-27所示。

图4-27 修改字段名称
提 示
用户也可以选择【字段名】后右击,并在弹出的快捷菜单中选择【属性】菜单命令,然后在弹出对话框的【名称】文本框中修改字段的名称。
4.2.4 添加字段
随着业务需求的变化,可能需要在已经存在的表中添加新的字段。在对象浏览器中添加字段的具体操作步骤如下:
步骤01 选择需要添加字段的数据表,右击并在弹出的快捷菜单中选择【创建】➢【列】菜单命令,如图4-28所示。
步骤02 弹出【创建−列】对话框,输入字段的名称和数据类型等基本参数后,单击【保存】按钮即可添加新的字段,如图4-29所示。

图4-28 选择【列】菜单命令

图4-29 【创建−列】对话框
一般情况下,一个完整字段包括字段名、数据类型、完整性约束。使用SQL语句添加字段的语法格式如下:
ALTER TABLE <表名> ADD COLUMN <新字段名> <数据类型>
1. 添加无完整性约束条件的字段
【例4.14】在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerid(部门经理编号),SQL语句如下:
ALTER TABLE tb_dept1 ADD COLUMN managerid INT;
命令执行后,选择【列】节点并刷新,即可看到新添加的字段managerid,如图4-30所示。

图4-30 创建字段managerId
2. 添加有完整性约束条件的字段
【例4.15】在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:
ALTER TABLE tb_dept1 ADD COLUMN column1 VARCHAR(12) not null;
命令执行后,查看新添加字段的属性,即可看到【不为NULL】选项为【是】,如图4-31所示。

图4-31 查看字段的属性
4.2.5 删除字段
删除字段是将数据表中的某个字段从表中移除。对于不用的字段,可以进行删除操作。使用对象浏览器删除对象的具体操作如下:
步骤01 选择需要删除的字段,右击并在弹出的快捷菜单中选择【删除/移除】菜单命令,如图4-32所示。
步骤02 弹出【删除列么?】对话框,单击【OK】按钮,即可删除所选的字段,如图4-33所示。

图4-32 选择【删除/移除】菜单命令

图4-33 【删除列么?】对话框
删除字段的语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
“字段名”指需要从表中删除的字段的名称。
【例4.16】删除数据表tb_dept1表中的managerid字段。
删除managerid字段,SQL语句如下:
ALTER TABLE tb_dept1 DROP managerid;

图4-34 删除字段managerid
命令执行后,刷新【列】节点,可以看到tb_dept1表中已经不存在名称为managerid的字段,删除字段成功,如图4-34所示。
4.2.6 删除表的外键约束
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系。
步骤01 选择需要删除的外键约束,右击并在弹出的快捷菜单中选择【删除/移除】菜单命令,如图4-35所示。
步骤02 弹出【删除外键么?】对话框,单击【OK】按钮,即可删除所选的外键,如图4-36所示。

图4-35 选择【删除/移除】菜单命令

图4-36 【删除外键么?】对话框
在PostgreSQL中,删除外键的语法格式如下:
ALTER TABLE <表名> DROP CONSTRAINT <外键约束名>
【例4.17】删除数据表tb_emp9中的外键约束。
首先创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句如下:

执行完上面的SQL语句后,刷新【表】节点,然后展开新创建的数据表的【约束】节点,即可看到创建的外键,如图4-37所示。

图4-37 创建的数据表的外键
可以看到,已经成功添加了表的外键。下面删除外键约束,SQL语句如下:
ALTER TABLE tb_emp9 DROP CONSTRAINT fk_emp_dept;
执行完毕之后,将删除表tb_emp9的外键约束,刷新tb_emp9表的【约束】节点,即可看到原有的名称为fk_emp_dept的外键约束删除成功,如图4-38所示。

图4-38 删除表tb_emp9的外键约束