PGSQL学习-基础表结构

1 访问数据库

创建好数据库后,你可以有三种方式访问数据库

  • 运行PostgreSQL的交互式终端程序,它被称为psql, 它允许你交互地输入、编辑和执行SQL命令。

  • 使用一种已有的图形化前端工具,比如pgAdmin或者带ODBC或JDBC支持的办公套件如DataGrip等来创建和管理数据库。

  • 使用多种绑定发行的语言中的一种写一个自定义的应用

psql访问

# psql 访问指定数据库
bash-4.2$ psql postgres
psql (14.12)
Type "help" for help.postgres=# # psql缺省访问,默认postgres数据库
bash-4.2$ psql
psql (14.12)
Type "help" for help.postgres=# # postgres=# 表示 当前数据库为postgres, #表示当前访问用户是数据库超级用户,=>则说明是普通用户

 查看pgsql版本信息

postgres=# select version();version                                                  
----------------------------------------------------------------------------------------------------------PostgreSQL 14.12 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

psql程序有一些不属于SQL命令的内部命令。它们以反斜线开头,“\

比如:

# \h 活着 \help 可以查看命令帮助文档
postgres=# \h
Available help:ABORT                            CHECKPOINT                       CREATE USER                      DROP TRIGGER# \c 连接到指定数据库
postgres=# \c mydb;
You are now connected to database "mydb" as user "postgres".
mydb=# # \l 列出所有的数据库
postgres=# \lList of databasesName    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +|          |          |             |             | postgres=CTc/postgrestemplate1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +|          |          |             |             | postgres=CTc/postgres
(3 rows)# \dn:列出当前数据库中的所有schema
mydb=# \dnList of schemasName  |  Owner   
--------+----------mydb_s | postgrespublic | postgres
(2 rows)# \d 表名 查看表结构
mydb=# \d mydb_s.test01Table "mydb_s.test01"Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------id     | integer |           |          | # \q 退出psql连接

2 创建数据库

# 创建一个名字叫mydb的数据库
create database mydb;# 删除数据库
drop databse mydb;

3 创建schema

一个cluster可以有多个database,而一个database可以有多个shema,一个shema可以有多个表

也就是说pgsql的数据层次结构分了三层,database -> shema -> table

这样划分可以在同一个database中创建名字相同的表但是属于不同shema

每个database默认有一个public的shema,如果创建表时不指定shema则默认为public

这样,多个用户操作同一个数据库时可以避免出现表名冲突。而且一个数据库需要加载第三方应用的数据时可以单独放在一个shema中,避免了表的冲突,同时也位于同一个database

# 创建shema
create shema shema1;
# 删除shema,如果shema下有表则删除失败
drop shema shema1;
# 强制删除
drop shema shema1 cascade;# 查看databse下所有shema
\dn
mydb=# \dnList of schemasName  |  Owner   
--------+----------mydb_s | postgrespublic | postgres

4 创建table

CREATE TABLE table_name(column1 datatype,column2 datatype,.....
);

比如创建一个weather表,包含5个字段,此时weather表属于public shema

CREATE TABLE weather (city            varchar(80),temp_lo         int,           -- 最低温度temp_hi         int,           -- 最高温度prcp            real,          -- 湿度date            date
);

创建指定shema的表,在表名前显示指定shema名称

CREATE TABLE public.cities (name            varchar(80),location        point
);

\d 查看表

mydb=# \dList of relationsSchema |  Name   | Type  |  Owner   
--------+---------+-------+----------public | cities  | table | postgrespublic | weather | table | postgres

\d 表名 查看表结构

mydb=# \d citiesTable "public.cities"Column  |         Type          | Collation | Nullable | Default 
----------+-----------------------+-----------+----------+---------name     | character varying(80) |           |          | location | point                 |           |          | 

插入数据

insert into

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);

请注意所有数据类型都使用了相当明了的输入格式。那些不是简单数字值的常量通常必需用单引号(')包围 

 在weather表中插入一条数据

mydb=# insert into weather values('cq',19,30,3.0,'2024/06/21');
INSERT 0 1

还可以使用copy命令加载大量的数据

比如 

COPY weather FROM '/home/user/weather.txt';

查看表数据

select

mydb=# select * from weather;city | temp_lo | temp_hi | prcp |    date    
------+---------+---------+------+------------cq   |      19 |      30 |    3 | 2024-06-21
(1 row)

删除表

drop table 表名 [,表名];

基本对数据的操作都和mysql一致,语法都是sql语法,比如添加数据是insert,删除delete,更新update,查询select

5 事务

pgsql中同样适用事务来保证并发时数据的安全

事务最重要的一点是它将多个步骤捆绑成了一个单一的、要么全完成要么全不完成的操作。步骤之间的中间状态对于其他并发事务是不可见的,并且如果有某些错误发生导致事务不能完成,则其中任何一个步骤都不会对数据库造成影响

pgsql中开启事务使用begin,提交事务使用commit,回滚事务使用 rollback

开启一个事务需要将SQL命令用BEGINCOMMIT命令包围起来

BEGIN;
UPDATE accounts SET balance = balance - 100.00WHERE name = 'Alice';
COMMIT;

pgsql中也有保存点

利用保存点来以更细的粒度来控制一个事务中的语句。保存点允许我们有选择性地放弃事务的一部分而提交剩下的部分

# 开启事务
BEGIN;# 更新数据
UPDATE accounts SET balance = balance - 100.00WHERE name = 'Alice';
# 添加保存点
SAVEPOINT my_savepoint;
# 更新数据2
UPDATE accounts SET balance = balance + 100.00WHERE name = 'Bob';
# 出现业务错误,需要回滚
-- oops ... forget that and use Wally's account
# 回滚
ROLLBACK TO my_savepoint;
# 再次更新数据3
UPDATE accounts SET balance = balance + 100.00WHERE name = 'Wally';# 提交事务
COMMIT;

6 表的继承

pgsql中有表继承关系,也就是说一个表可以继承于另一个表,一般表达父子、所属关系,比如城市和首都,首都就属于城市

父表会包含子表信息,子表会继承父表字段

举例:

创建cities和capitals,分别表示城市和首都,首都继承城市,那么首都表拥有cities的所有字段和本身state字段

CREATE TABLE cities (name       text,population real,altitude   int     -- (in ft)
);CREATE TABLE capitals (state      char(2)
) INHERITS (cities);

查询所有cities时,会查询cities表和capitals表

比如:查询海拔高度>500的城市,则会返回cities和captials所有符合要求的

SELECT name, altitudeFROM citiesWHERE altitude > 500;

如果只想查询首都海拔高度的,则需要 from only

SELECT name, altitudeFROM ONLY citiesWHERE altitude > 500;

only标记可以用着各个语法中,比如 SELECTUPDATE 和DELETE 

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

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

相关文章

红人点集登录逆向+接口逆向:SHA256算法和Webpack反爬

🔍 引言 红人点集采取了一系列加密和限制措施,主要是对于参数加密和登录token加密。今天利用Python与JavaScript逆向工程技术,实现逆向登录然后请求接口获取数据。 🔍 思路与步骤详解 🔧 解密登录接口参数&#xf…

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法 一、环境介绍1.1 本次环境规划1.2 kubernetes简介1.3 kubernetes特点二、本次实践介绍2.1 本次实践介绍2.2 报错场景三、查看报错日志3.1 查看pod描述信息3.2 查看pod日志四、报错分析五、故障处理…

机器学习·概率论基础

概率论 概率基础 这部分太简单,直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中,先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…

如何将mp4格式的视频压缩更小 mp4格式视频怎么压缩最小 工具软件分享

在数字化时代,视频内容成为信息传播的重要载体。然而,高清晰度的视频往往意味着较大的文件体积,这给存储和分享带来了一定的困扰。MP4格式作为目前最流行的视频格式之一,其压缩方法尤为重要。下面,我将为大家详细介绍如…

浏览器渲染揭秘:从加载到显示的全过程;浏览器工作原理与详细流程

目录 浏览器工作原理与流程 一、渲染开始时间点 二、渲染主线程的渲染流程 2.1、渲染流程总览 2.2、渲染具体步骤 ①解析html-Parse HTML ②样式计算-Recalculate Style ③布局-Layout ④分层-Layer 相关拓展 ⑤绘制-Paint ⑥分块-Tiling ⑦光栅化-Raster ⑧画-D…

Python爬虫 instagram API获取instagram帖子数据信息

这个instagram接口可以通过url链接直接获取相关帖子信息。如有需求,可点击文末链接联系我们。 详细采集页面 https://www.instagram.com/p/CqIbCzYMi5C/ 请求参数 返回示例 { "__typename": "GraphSidecar", "accessibility_caption&qu…

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

🎯要点 🎯算法随机图模型数学概率 | 🎯图预期度序列数学定义 | 🎯生成具有任意指数的大型幂律网络,数学计算幂律指数和平均度 | 🎯随机图分析中巨型连接分量数学理论和推论 | 🎯生成式多层网络…

购物车案例(源码分享)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

排序算法与复杂度介绍

1. 排序算法 1.1 排序算法介绍 排序也成排序算法(Sort Algorithm),排序是将一组数据,依照指定的顺序进行排序的过程 1.2 排序的分类 1、内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存&am…

android13禁用某个usb设备

总纲 android13 rom 开发总纲说明 目录 1.前言 2.触摸设备查看 3.功能修改 3.1 禁用usb触摸 3.2 禁用usb键盘 3.3 禁用usb遥感 4.查看生效与否 5.彩蛋 1.前言 用户想要禁止使用某些usb设备,需要系统不能使用相关的usb设备,例如usb触摸屏,usb键盘,usb遥感等等usb…

Python零基础快速入门!

“人生苦短,我学python”是编程届的名言。用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言。拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的。编程理念都十分相似,只是看看语言的差异性。带…

Python函数的介绍;变量的作用域;递归函数

一、函数的创建和调用 1.1、什么是函数 函数就是执行特定任和以完成特定功能的一段代码 1.2、为什么需要函数 复用代码 隐藏实现细节 提高可维护性 提高可读性便于调试 1.3、函数的创建 def 函数名(输入函数)函数体(return XXX) 1.4、函数的调用 函数名 (实际参数) 二、…

当当网数据采集:Scrapy框架的异步处理能力

在互联网数据采集领域,Scrapy框架以其强大的异步处理能力而著称。Scrapy利用了Python的异步网络请求库,如twisted,来实现高效的并发数据采集。本文将深入探讨Scrapy框架的异步处理能力,并展示如何在当当网数据采集项目中应用这一能…

用Java手写jvm之实现java -version的效果

写在前面 源码 。 本文来用纯纯的Java代码来实现java -version的效果,就像下面这样: 1:程序 这里输出类似这样的: java version "9" Java(TM) SE Runtime Environment (build 9181) Java HotSpot(TM) 64-Bit Serve…

[保姆级教程]uniapp安装使用uViewUI教程

文章目录 创建 UniApp 项目下载uView UI下载安装方式步骤 1: 安装 uView UI步骤 2: 查看uView UI是否下载成功步骤 3: 引入 uView 主 JS 库步骤 4: 引入 uView 的全局 SCSS 主题文件步骤 5: 引入 uView 基础样式步骤 6: 配置 easycom 组件模式注意事项 NPM方式步骤 1: 安装 uVi…

websocket状态机

websocket突破了HTTP协议单向性的缺陷,基于HTTP协议构建了双向通信的通道,使服务端可以主动推送数据到前端,解决了前端不断轮询后台才能获取后端数据的问题,所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…

MATLAB绘制正弦波、余弦波、方波、三角波

一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件,提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中,你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例,展示了如何使用MATLAB的命令来实现正弦…

基于dcm4chee搭建的PACS系统讲解(一)docker搭建精简版

文章目录 知识点PACSdcm4chedcm4chee部署dcm4chee方式 docker部署docker编排 总结 最近项目开始需要用到PACS系统,于是研究了一番,选用了dcm4chee搭建PACS系统,抛出 dcm-arc-light的git地址 。 知识点 PACS Picture Archiving and Communic…

【详细的springboot自动装载原理】

1.默认提供的核心配置模块 springboot提供了 spring-boot-autoconfigure模块,该模块为springboot自动配置的核心模块,它初始化好了很多我们平时需要的配置类,那么有了这些配置类就能生效了吗?得需要一个东西在启动的时候去把它加…

uniapp 小程序 嵌套 webview 返回需要点击两次

uniapp 小程序 嵌套 webview 返回需要点击两次 先 上图 小程序也监听不到 返回事件在网上找了一圈 都没有理想的答案&#xff0c;猜测 是因为嵌入的页面中有问题果然 小程序中嵌入的代码 <view><web-view :src"urlSrc" ></web-view></view>…