【postgresql 基础入门】表的操作,表结构查看、修改字段类型、增加删除字段、重命名表,对表的操作总是比别人棋高一着

表的操作

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 入门准备
  • postgrersql基础架构
  • 快速使用
  • 初始化集群
  • 数据库服务管理
  • psql客户端使用
  • pgAdmin图形化客户端
  • 数据库的使用
  • 创建数据库
  • 数据库操作
  • 表的使用
  • 表的创建
  • 表的操作
  • 数据查询
  • 数据查询

文章目录

  • 表的操作
  • 系列文章
  • 前言
  • 概述
  • 查看表的结构
  • 查询数据
  • 插入数据
  • 修改字段
    • 修改类型
    • 修改字段名称
  • 添加和删除字段
    • 删除字段
    • 添加字段
  • 重命名表
  • 删除表
  • 查表的OID
  • 总结
  • 结尾

前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

概述

前一篇分享了创建表的相关内容,对于表也有很多属性,如果这些属性在创建时搞错了,那是否需要删除表再来呢?

本文就从以下几个方面,带大家看看表的各种操作,在平时数据库开发和维护时,不需要再求助别人了。

  • 查看表结构
  • 查询数据
  • 插入数据
  • 删除数据
  • 修改表字段
  • 添加和删除表字段
  • 重命名表
  • 删除表
  • 查表的OID

查看表的结构

当我们使用表时,也要知道表的定义结构,有那些字段,以及字段的类型,有没有主键,外键等;

如果不是我们自己创建的表,可以在数据库中进行查询表结构;
下面使用安装时自带的psql做为客户端进行操作;

首先登录数据库,我们看到前期已经有两张table存在;

[senllang@hatch 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.company"Column  |     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.company"Column  |          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.company"Column  |          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.company"Column  |          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.company"Column  |          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 relname='tbl_company';oid  |   relname
-------+-------------16510 | tbl_company
(1 row)

总结

通过本文的分享,对于表的属性的查询,变更有了进一步了解,数据字典中关于表的信息,如OID,存储位置,是普通表还是临时表等,都记录在pg_class当中,当然它还记录了很多有用的信息,有兴趣的同学可以自己查询试试。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 ,不用string.h的函数,实现A+B A-B的字符串处理功能。

请输入A串信息:abcdef 请输入B串信息:ac abcdefac B串的长度是:2 B不是A的子串&#xff0c;请重新输入B的值: ad B不是A的子串&#xff0c;请重新输入B的值: abcde A-B后的结果是:f #include <stdio.h>#define MAX 100void fun(char* a, char *b, char *c) {int ai 0;…

Zabbix

Zabbix简介 ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 ●zabbix 由 2 部…

centost7下安装oracle11g 总结踩坑

1.参考文章 【总结】CentoS下Oracle静默安装流程_正在启动oracle universal installer..._仲冬二三的博客-CSDN博客 https://blog.csdn.net/Liqiong_0412/article/details/126153857? unset DISPLAY 可以跳过图形化检查 这边也卡了很久 [oraclewangmengyuan database]$ .…

创造您梦寐以求的家居设计——Live Home 3D Pro for Mac

您是否曾经想象过在舒适的家中展现自己独特的风格&#xff1f;现在&#xff0c;您可以通过Live Home 3D Pro for Mac来实现您的家居设计梦想&#xff01;这款强大的3D家居设计软件将带给您无限的创作可能性。 Live Home 3D Pro for Mac是一款专业级的家居设计软件&#xff0c;…

Visual Studio 更新:远程文件管理器

Visual Studio 中的远程文件管理器可以用来访问远程机器上的文件和文件夹&#xff0c;通过 Visual Studio 自带的连接管理器&#xff0c;可以实现不离开开发环境直接访问远程系统&#xff0c;这确实十分方便。 自从此功能发布以来&#xff0c;VS 开发团队努力工作&#xff0c;…

算法通关村-----数组中元素出现次数问题

数组中出现次数超过一半的数字 问题描述 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。详见剑指offer39 问题分析 最直接的方式就是使用hashMap,遍历给定数组&#xff0c…

基于STC15单片机电子时钟液晶1602串口显示-proteus仿真-源程序

一、系统方案 1、本设计采用STC15单片机作为主控器。 2、液晶1602显示电子时钟。 3、串口显示电子时钟。 4、按键控制开启暂停清零。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 uint count0; uint8 strPhoto[8]; uint wendu0;P3M0 0x…

如何选择适合爬虫的动态住宅套餐

在当今互联网时代&#xff0c;爬虫已经成为了一项非常重要的技术。爬虫技术可以帮助企业和个人获取大量的数据&#xff0c;从而进行数据分析和决策。但是&#xff0c;要想让爬虫技术发挥最大的作用&#xff0c;就需要选择一款动态住宅套餐。那么&#xff0c;在选择动态住宅套餐…

1.3python基础语法——PyCharm

1&#xff09;PyCharm的作用 python的集成开发环境&#xff0c;功能如下&#xff1a; Project管理 智能提示 语法高亮 代码跳转 调试代码 解释代码(解释器) 框架和库 2&#xff09;下载与安装 下载地址&#xff1a;http://www.jetbrains.com/pycharm/download/#sectionwind…

进阶指针(一)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 进阶指针&#xff08;一&#xff09; 0.回顾初阶指针1.字符指针1.1 相关面试题 2.数组指针3.指针数组3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4.数组传参和指针传参4.…

Linux中配置sudo用户访问权限

一、如何在 Linux 中配置 sudo 的访问权限 1.1、添加一个Linux普通用户有 sudo 权限 [root@localhost ~]# useradd test // 创建一个普通用户为:test [root@localhost ~]# [root@localhost ~]# passwd test // 设置用户test密码为:test Changing password for user te…

C# Onnx Yolov8 Cls 分类

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

Jenkins学习笔记1

CI 服务器&#xff1a; 认识Jenkins&#xff1a; Jenkins是一个可扩展的持续集成&#xff08;CI&#xff09;引擎&#xff0c;是一个开源项目&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使得软件持续集成变成可能。Jenkins非常易于安装和配置&#xff0c;简单易…

什么是SVG(可缩放矢量图形)?它与普通图像格式有何不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是SVG&#xff1f;⭐ 与普通图像格式的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚…

Tomcat多实例+Nginx动静分离、负载均衡

这里写目录标题 Tomcat多实例动静分离、负载均衡一、Tomcat多实例部署1、安装JDK2、安装启动tomcat 二、NginxTomcat负载均衡、动静分离1、Nginx负载均衡实现原理1.1 原理1.2 Nginx配置反向代理的主要参数 2、Nginx动静分离实现原理2.1 原理2.2 Nginx静态处理优势 3、动静分离配…

jvm-sandbox-repeater源码解析-配置管理

一、配置初见 源码里提供的控制台截图如下&#xff1a;&#xff08;怎么搭建自己去百度&#xff09; 从中取出对应的配置如下&#xff1a; { "degrade": false, //阻断能力 "exceptionThreshold": 1000, //异常采样率 "httpEntrancePatterns&qu…

工业检测 ocr

采用OpenCV和深度学习的钢印识别_菲斯奇的博客-CSDN博客采用OpenCV和深度学习的钢印识别[这个帖子标题党了很久&#xff0c;大概9月初立贴&#xff0c;本来以为比较好做&#xff0c;后来有事情耽搁了&#xff0c;直到现在才有了一些拿得出手的东西。肯定不会太监的。好&#xf…

2023.9.19 关于 数据链路层 和 DNS 协议 基本知识

目录 数据链路层 MTU DNS 协议 补充 DHCP协议 数据链路层 基本概念&#xff1a; 考虑相邻两个节点之间的传输&#xff08;通过 网线 / 光纤 / 无线 直接相连的两个设备&#xff09;以太网协议 规定了 数据链路层 和 物理层 的内容 IP地址 与 mac地址 的相互配合 IP地址 描…

leetcode-LCP 06. 拿硬币

LCP 06. 拿硬币 题目解题方法一&#xff1a;贪心 题目 题目连接 桌上有 n 堆力扣币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有力扣币的最少次数。 示例 1&#xff1a; 输入&#xff1a;…

vue的模板语法(下篇)

目录 一.事件处理 二.表单的综合案例 三.组件通信⭐⭐ 3.1 自定义组件 3.2 组件通信之父传子 3.3组件通信之子传父 一.事件处理 Vue通过由点(.)表示的指令后缀来调用修饰符&#xff0c; .stop .prevent .capture .self .once 如下&#xff1a; 阻止单击事件冒泡 <a v-on…