网站专业优化,网站500,程序员外包网站,广告投放优化师表的操作 专栏内容#xff1a; postgresql内核源码分析手写数据库toadb并发编程 开源贡献#xff1a; toadb开源库 个人主页#xff1a;我的主页 管理社区#xff1a;开源数据库 座右铭#xff1a;天行健#xff0c;君子以自强不息#xff1b;地势坤#xff0c;君子…表的操作 专栏内容 postgresql内核源码分析手写数据库toadb并发编程 开源贡献 toadb开源库 个人主页我的主页 管理社区开源数据库 座右铭天行健君子以自强不息地势坤君子以厚德载物. 系列文章
入门准备postgrersql基础架构快速使用初始化集群数据库服务管理psql客户端使用pgAdmin图形化客户端数据库的使用创建数据库数据库操作表的使用表的创建表的操作数据查询数据查询 文章目录 表的操作系列文章前言概述查看表的结构查询数据插入数据修改字段修改类型修改字段名称 添加和删除字段删除字段添加字段 重命名表删除表查表的OID总结结尾 前言
postgresql 数据库是一款通用的关系型数据在开源数据库中能与商业数据媲美在业界也越来越流行。
因为是开源数据库不仅公开源码还有很多使用案例好用的插件所以它的慢慢变成了数据库的先驱和标准通过postgresql可以很好从使用到原理彻底搞懂
如果是学习编程也可以学到丰富的编程知识数据结构编程技巧它里面还有很多精妙的架构设计分层思想可以灵活定制的思想。
本专栏主要介绍postgresql 入门使用数据库维护管理通过这些使用来了解数据库原理慢慢了解postgresql是什么样的数据库能做那些事情以及如何做好服务最关键的是这些知识都是面试的必备项。
概述
前一篇分享了创建表的相关内容对于表也有很多属性如果这些属性在创建时搞错了那是否需要删除表再来呢
本文就从以下几个方面带大家看看表的各种操作在平时数据库开发和维护时不需要再求助别人了。
查看表结构查询数据插入数据删除数据修改表字段添加和删除表字段重命名表删除表查表的OID
查看表的结构
当我们使用表时也要知道表的定义结构有那些字段以及字段的类型有没有主键外键等
如果不是我们自己创建的表可以在数据库中进行查询表结构 下面使用安装时自带的psql做为客户端进行操作
首先登录数据库我们看到前期已经有两张table存在
[senllanghatch bin]$ ./psql -d db_factory2 -U hr
WARNING: permission denied to set role vp3
psql (16beta1)
Type help for help.db_factory2 \dList of relationsSchema | Name | Type | Owner
----------------------------------------------------public | company | table | hrpublic | employees | table | hrpublic | employees_employee_id_seq | sequence | hr
(3 rows)db_factory2
接下来看一下这两张表的结构并验验证查询和插入数据试一下
db_factory2 \d companyTable public.companyColumn | Type | Collation | Nullable | Default
------------------------------------------------------id | integer | | not null |name | text | | not null |age | integer | | not null |address | character(50) | | |salary | real | | |
Indexes:company_pkey PRIMARY KEY, btree (id)可以看到company 这张表的信息通过表格的形式展示出来第一列是字段史第二列是类弄后面是约束还有默认值
可以看到有五个字段id字段是主键主键也是一种索引这里默认采用btree索引类型还有非空约束address字段的长度为50
查询数据
再来看一下表中是否有数据这里可以按字段查也可以用*来代替所有字段
db_factory2 select * from company;id | name | age | address | salary
--------------------------------
(0 rows)
db_factory2 select id from company ;id
----
(0 rows)表中还没有数据
插入数据
插入数据我们使用标准SQL语句如果每个字段都有值时可以省略字段名解析时会根据值顺序对应到每个字段
db_factory2 insert into company (id,name,age,address,salary) values(1,hongxing,8,shangdong,4.8),(2,dongfeng,20,shenyang,10.22);
INSERT 0 2
db_factory2 select * from company;id | name | age | address | salary
-------------------------------------------------------------------------------1 | hongxing | 8 | shangdong | 4.82 | dongfeng | 20 | shenyang | 10.22
(2 rows)一次插入了两条数据values后面可以是多个值域这样就可以插入多条但是值域中字段值数量必须一样否则解析器是没有办法对齐到表字段的
修改字段
对已经存在的表的字段进行修改可以对字段名称类型进行变更
修改类型
db_factory2 alter table company alter column name type varchar(255);
ALTER TABLE
db_factory2 \d companyTable public.companyColumn | Type | Collation | Nullable | Default
---------------------------------------------------------------id | integer | | not null |name | character varying(255) | | not null |age | integer | | not null |address | character(50) | | |salary | real | | |
Indexes:company_pkey PRIMARY KEY, btree (id)将name字段的类型长度由原来无限制变更为255字符
类型的修改需要注意并不是所有类型都可以任意修改修改后的类型必须兼容之前的类型最好不存在数据丢失的问题
修改字段名称
表定义后老板说这个名字起的不好那只好修改一下可以这样操作
db_factory2 alter table company rename age TO founded;
ALTER TABLE
db_factory2 \d companyTable public.companyColumn | Type | Collation | Nullable | Default
---------------------------------------------------------------id | integer | | not null |name | character varying(255) | | not null |founded | integer | | not null |address | character(50) | | |salary | real | | |
Indexes:company_pkey PRIMARY KEY, btree (id)添加和删除字段
虽然上面把age改成了founded成立日期但是类型却怎么也修改不成功 那这 。。。
db_factory2 alter table company alter column founded type timestamp without time zone;
ERROR: column founded cannot be cast automatically to type timestamp without time zone
HINT: You might need to specify USING founded::timestamp without time zone.注意在做下列操作之前需要对数据进行备份否则数据就会丢失 遇到这种情况当在初期时还在测试阶段可以采用删除字段再添加的办法当然这样做之后这列的数据都会丢失
删除字段
db_factory2 alter table company drop column founded ;
ALTER TABLE
db_factory2 \d companyTable public.companyColumn | Type | Collation | Nullable | Default
---------------------------------------------------------------id | integer | | not null |name | character varying(255) | | not null |address | character(50) | | |salary | real | | |
Indexes:company_pkey PRIMARY KEY, btree (id)添加字段
之后可以按正确的字段名称类型进行添加
db_factory2 alter table company add column founded date;
ALTER TABLE
db_factory2 \d companyTable public.companyColumn | Type | Collation | Nullable | Default
---------------------------------------------------------------id | integer | | not null |name | character varying(255) | | not null |address | character(50) | | |salary | real | | |founded | date | | |
Indexes:company_pkey PRIMARY KEY, btree (id)现在可以了那么这一列的数据就需要重新录入了可以使用update语句批量录入
重命名表
如果发现表名含义不清可以通过重命名的方式进行修改
db_factory2 alter table company rename to tbl_company;
ALTER TABLE这个操作对于数据库内部不会产生影响因为内部是通过OID进行引用但是对于已经运行的业务系统需要修改SQL中的引用方式
删除表
删除一张不再使用的表
db_factory2 drop table employees ;
DROP TABLE删除成功的前提是这张表没有被别的数据库对象引用(视图外键等)比如在这个表上创建了视图那么就先要删除视图或者是采取级联删除的方式一起删除
查表的OID
数据库内部使用OID引用OID是唯一标识在磁盘上存储时也采用OID来命名如何知道表的OID呢 表相关信息记录在pg_class这张系统表中
db_factory2 select oid,relname from pg_class where relnametbl_company;oid | relname
--------------------16510 | tbl_company
(1 row)总结
通过本文的分享对于表的属性的查询变更有了进一步了解数据字典中关于表的信息如OID存储位置是普通表还是临时表等都记录在pg_class当中当然它还记录了很多有用的信息有兴趣的同学可以自己查询试试。
结尾 非常感谢大家的支持在浏览的同时别忘了留下您宝贵的评论如果觉得值得鼓励请点赞收藏我会更加努力 作者邮箱studysenllang.onaliyun.com 如有错误或者疏漏欢迎指出互相学习。
注未经同意不得转载