![PostgreSQL 11从入门到精通(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/374/27563374/b_27563374.jpg)
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所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P73_7637.jpg?sign=1739208744-sOeSLJEH5UJ6OMfcTh5pirMLTixT2jkw-0-130dd5e762eacfe9287ae2dba6e93c6c)
图4-24 【表 - tb_dept3】对话框
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P73_7638.jpg?sign=1739208744-YhIhV9r6ptd4PBwJaAUVKFZYWKE46uab-0-0ccf3fec69af79f65384296b02605e82)
图4-25 修改数据表的名称
提 示
读者可以在修改表名称时查看修改前后两个表的结构。修改表名并不修改表的结构,因此修改名称后的表和修改名称前的表的结构必然是相同的。
4.2.2 修改字段的数据类型
对于创建好的字段,用户可以修改它的数据类型。使用SQL语言可以修改字段的数据类型。修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。在PostgreSQL中修改字段数据类型的语法规则如下:
ALTER TABLE <表名> ALTER COLUMN <字段名> TYPE <数据类型>
其中,“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。
【例4.12】将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。
输入如下SQL语句并执行:
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P73_39001.jpg?sign=1739208744-hXe2JTuXLGgM7bw8xCA2w5Vmd9z6boSC-0-73f7c9ba9d3029fa553d9fa06ed32421)
在对象浏览器中选择tb_dept1数据表的【name】字段,执行刷新操作,然后右击并在弹出的快捷菜单中选择【属性】菜单命令,即可在弹出的对话框中看到数据类型发生了变化,如图4-26所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P74_7687.jpg?sign=1739208744-NxMsTtmd9OZcV0xDpMihsBEbp2HeMGgZ-0-0c4928f6e8acb138653f3754373d75f5)
图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所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P75_7727.jpg?sign=1739208744-aYI6nEeufmAuMjl1GEYtV3hJQ6brK1lR-0-b284ef52a9cc4708c33b1dcbd889f6cc)
图4-27 修改字段名称
提 示
用户也可以选择【字段名】后右击,并在弹出的快捷菜单中选择【属性】菜单命令,然后在弹出对话框的【名称】文本框中修改字段的名称。
4.2.4 添加字段
随着业务需求的变化,可能需要在已经存在的表中添加新的字段。在对象浏览器中添加字段的具体操作步骤如下:
步骤01 选择需要添加字段的数据表,右击并在弹出的快捷菜单中选择【创建】➢【列】菜单命令,如图4-28所示。
步骤02 弹出【创建−列】对话框,输入字段的名称和数据类型等基本参数后,单击【保存】按钮即可添加新的字段,如图4-29所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P75_7744.jpg?sign=1739208744-s3wJyRoDo9GEOm4xMMQ18lRznAsch2ps-0-b58b588e171b69a113a7190c905a88cf)
图4-28 选择【列】菜单命令
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P75_7745.jpg?sign=1739208744-2TcoTggE5yC6lao3mkKddxTqQ224oit6-0-55d74056ce3c19444ea36fb399191647)
图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所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P76_7786.jpg?sign=1739208744-bfQVSKqQGkiBjBYJ3m5RqapNQfg5hdkL-0-2a8fabd9f17436b661c9ee8a92fc0cae)
图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所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P76_7802.jpg?sign=1739208744-vKsQTJzDQFhcmcZ2HwgBXgWxpJxjVvKn-0-b3ad34f33af93a0ca770ddbe40689055)
图4-31 查看字段的属性
4.2.5 删除字段
删除字段是将数据表中的某个字段从表中移除。对于不用的字段,可以进行删除操作。使用对象浏览器删除对象的具体操作如下:
步骤01 选择需要删除的字段,右击并在弹出的快捷菜单中选择【删除/移除】菜单命令,如图4-32所示。
步骤02 弹出【删除列么?】对话框,单击【OK】按钮,即可删除所选的字段,如图4-33所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P77_7828.jpg?sign=1739208744-EtYEpMwi95Cu8DGCYYcaofQmYEQHDWzY-0-089b418ccdb05968519aab5b4a3d8a50)
图4-32 选择【删除/移除】菜单命令
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P77_7829.jpg?sign=1739208744-8JLwie1HqxEKPwqnuN9kFHj6kZjSBPE5-0-df5b463a1fc1dc0fdd671b4bee1f212c)
图4-33 【删除列么?】对话框
删除字段的语法格式如下:
ALTER TABLE <表名> DROP <字段名>;
“字段名”指需要从表中删除的字段的名称。
【例4.16】删除数据表tb_dept1表中的managerid字段。
删除managerid字段,SQL语句如下:
ALTER TABLE tb_dept1 DROP managerid;
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P77_7866.jpg?sign=1739208744-NGekHUJLklkKAex5dx23XrG0aRe5RU32-0-da45d393f785a282a05f29076833271f)
图4-34 删除字段managerid
命令执行后,刷新【列】节点,可以看到tb_dept1表中已经不存在名称为managerid的字段,删除字段成功,如图4-34所示。
4.2.6 删除表的外键约束
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系。
步骤01 选择需要删除的外键约束,右击并在弹出的快捷菜单中选择【删除/移除】菜单命令,如图4-35所示。
步骤02 弹出【删除外键么?】对话框,单击【OK】按钮,即可删除所选的外键,如图4-36所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P78_7884.jpg?sign=1739208744-5nXKD5oi84MkOhG2ovRhxVmJJaXHOKz8-0-0e06c96f72bd352f296cd6d48e03aab5)
图4-35 选择【删除/移除】菜单命令
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P78_7885.jpg?sign=1739208744-KRmV1pBixABoJ6qTKUsMCu71wW2EnWyi-0-26d0f6ceb30cb1ada16acb1ba9ed8783)
图4-36 【删除外键么?】对话框
在PostgreSQL中,删除外键的语法格式如下:
ALTER TABLE <表名> DROP CONSTRAINT <外键约束名>
【例4.17】删除数据表tb_emp9中的外键约束。
首先创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句如下:
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P78_39029.jpg?sign=1739208744-ZEH0lKezENayUYGFUbWfEwEIjT7PBfgy-0-66642aa057d6d1ab4a4e50614f75178e)
执行完上面的SQL语句后,刷新【表】节点,然后展开新创建的数据表的【约束】节点,即可看到创建的外键,如图4-37所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P79_7970.jpg?sign=1739208744-2721VeL88s8vYqSrLF6f2RCToS9QLiiC-0-77e553ee8d328ee8856e5c696f97cc94)
图4-37 创建的数据表的外键
可以看到,已经成功添加了表的外键。下面删除外键约束,SQL语句如下:
ALTER TABLE tb_emp9 DROP CONSTRAINT fk_emp_dept;
执行完毕之后,将删除表tb_emp9的外键约束,刷新tb_emp9表的【约束】节点,即可看到原有的名称为fk_emp_dept的外键约束删除成功,如图4-38所示。
![](https://epubservercos.yuewen.com/A04484/15825992904147006/epubprivate/OEBPS/Images/Figure-P79_7986.jpg?sign=1739208744-382Ko0LgfSZod1jRjf60AAecLhk8EdzO-0-f3a73512b2c3a684dec6b287b7da9b85)
图4-38 删除表tb_emp9的外键约束