PostgreSQL

news2024/12/24 2:42:40

一. PostgreSQL 简介

1 资料来源:

中文手册:http://www.postgres.cn/docs/14/index.html
知乎链接:https://www.zhihu.com/column/c_1452567507496689664
视频链接:https://www.bilibili.com/video/BV1uW4y1m7pD/?spm_id_from=pageDriver&vd_source=372365c1ea72bb6075a0ec1b05671b3a

二. PostgreSQL 安装

1 docker 安装

拉取镜像
docker pull postgres

创建容器
docker run -itd --name postgres -e POSTGRES_PASSWORD=root -p 5432:5432 postgres:15

三. SQL语言

1. DDL

2. DML

CREATE TABLE products (
product_no integer,
name text,
price numeric
);

2.1 insert

  • 单行
INSERT INTO products VALUES (1, 'Cheese', 9.99);
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);

INSERT INTO products (product_no, name) VALUES (1, 'Cheese');
INSERT INTO products VALUES (1, 'Cheese');
  • 多行
INSERT INTO products (product_no, name, price) VALUES
    (1, 'Cheese', 9.99),
    (2, 'Bread', 1.99),
    (3, 'Milk', 2.99);


INSERT INTO products (product_no, name, price)
  SELECT product_no, name, price FROM new_products
    WHERE release_date = 'today';

2.2 update

UPDATE products SET price = 10 WHERE price = 5;
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;

2.3 delete

DELETE FROM products WHERE price = 10;
DELETE FROM products;

2.4 数据合并

insert into public.user(id,username,password) values(15,'root','root') 
on conflict (id) 
do update set username = excluded.username, password = excluded.password

2.5 CTE和通用表表达式

  • 插入
with inserts as 
(
 insert into employees values(1234,'1','1','1','1','2008-03-08','ST_CLERK',1.00,0.1,'120','90')
 returning *
)
insert into employees_his select * from inserts;

  • 更新
with updates as 
(
 update employees 
 set salary = salary + 500
 where salary = 2100
 returning *
)
select * into employees_his from updates


with updates as 
(
 update employees 
 set salary = salary + 500
 where salary = 2100
 returning *
)
insert into employees_his select * from updates;

3. DQL

3.1 通用表表达式

with tempA as (
select * from public.goods where id < 4
),
tempB as (
select * from public.goods where id >= 4
)
select * from tempA
union all 
select * from tempB

在这里插入图片描述

3.2 递归查询语句

with recursive cte(n) as 
(
	select 1
	union ALL
	select n + 1 from cte where n < 5
)
select * from cte

在这里插入图片描述

3.3 窗口函数

3.3.1 定义

窗口函数,也叫OLAP(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理

3.3.2 常用的窗口函数

sum
avg
max
min
count
rank
row_number

3.3.3 格式

window_function ( expr ) over (
partition by …
order by …
frame_clause
)

window_function是窗口名称,expr是函数参数,有些函数不需要参数,
over子句包含:三部分

  • 分区:partition by
  • 排序:order by
  • 窗口大小:frame_clause

3.3.4 示例

select department_id, hire_date, salary, sum(salary) over (partition by department_id order by salary)
from public.employees;

select department_id, hire_date, salary, rank() over (partition by department_id order by salary desc)
from public.employees;

select department_id, hire_date, salary, row_number() over (partition by department_id order by salary desc)
from public.employees;

在这里插入图片描述

4. 数据类型

四. 高级特性

1. 事务与并发控制

1.1 acid特性

原子性
一致性
隔离性
持久性

1.2 事务控制语句

begin;
	insert into employees values(1234,'1','1','1','1','2008-03-08','ST_CLERK',1.00,0.1,'120','90');
	insert into employees values(1235,'1','1','1','1','2008-03-08','ST_CLERK',1.00,0.1,'120','90');
commit; // rollback

1.3 并发和隔离

脏读:一个事务可以读取到其他事务未提交的修改;
不可重复读:一个事务读取某个记录后,再次读取该记录时数据发生了改变(被其他事务修改并提交);
幻读:一个事务按照某个条件查询一些数据后,再次执行相同查询时结果的数量发生的改变(另一个事务增加或删除了某些数据并完成提交);
更新丢失:两个事务同时读取某一条记录,分别进行修改提交,就会造成先修改的事务的修改丢失。
在这里插入图片描述

2. 索引与优化

3. 视图

4. 存储过程

5. 触发器

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

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

相关文章

win下docker安装和使用

安装 下载安装包&#xff1a;https://docs.docker.com/desktop/install/windows-install/ 下载 Linux 内核更新包 适用于 x64 计算机的 WSL2 Linux 内核更新包 解决docker下载镜像速度慢问题 阿里云镜像加速器&#xff1a;https://阿里ID.mirror.aliyuncs.com 复制上面镜像…

轮廓检测,高斯模糊及功能

轮廓检测 一、实验介绍 1. 实验内容 本实验将学习轮廓检测及功能。 2. 实验要点 生成二进制图像来查找轮廓找到并画出轮廓轮廓特征边界矩形 3. 实验环境 Python 3.6.6numpymatplotlibcv2 二、实验步骤 1 导入资源并显示图像 import numpy as np import matplotlib.py…

rabbitmq第四课-RabbitMQ高可用集群架构详解以及生产环境最佳实践

一、如何保证RabbitMQ服务高可用 1、RabbitMQ如何保证消息安全 之前通过单机环境搭建起来的RabbitMQ服务有一个致命的问题&#xff0c;那就是服务不稳定的问题。如果只是单机RabbitMQ的服务崩溃了&#xff0c;那还好&#xff0c;大不了重启下服务就是了。 但是如果是服务器的…

MySQL 逻辑备份mysqldump

逻辑备份mysqldump MySQL 自带的逻辑备份工具。可以保证数据的一致性和服务的可用性原理是通过协议连接到 MySQL 数据库&#xff0c;将需要备份的数据查询出来&#xff0c;将查询出的数据转换成对应的 insert 语句&#xff0c;当我们需要还原这些数据时&#xff0c;只要执行这些…

红帽“背叛”开源:限制RHEL源码访问,突袭下游发行版

红帽决定停止公开提供其企业发行版 Red Hat Enterprise Linux (RHEL) 源代码。 从现在开始&#xff0c;CentOS Stream 将成为公共 RHEL 相关源代码发布的唯一仓库&#xff0c;付费客户和合作伙伴可通过 Red Hat Customer Portal 访问到源代码。 CentOS Stream 是由 Red Hat 公…

UNIX环境高级编程——网络IPC:套接字

16.1 引言 本章将考察不同计算机&#xff08;通过网络相连&#xff09;上的进程相互通信的机制&#xff1a;网络进程间通信&#xff08;network IPC&#xff09;。 16.2 套接字描述符 为创建一个套接字&#xff0c;调用socket函数&#xff1a; #include <sys/socket.h&g…

图像增强之图像锐化(边缘增强)之robot算子

目录 note code test note matx (-1,0;1,0) maty (0,-1;1,0) code // 图像增强之图像锐化(边缘增强)之robot算子 void GetRobot(Mat& robotX, Mat& robotY) {robotX (Mat_<int>(2,2) << -1,0,1,0);robotY (Mat_<int>(2,2) << 0,-1,1…

bug汇集-二

1、多个表格 设置 只让当前选中行对应的表格行--高亮 问题&#xff1a;只能设置一个表格高亮&#xff0c;选中一个表格某行高亮&#xff0c;另一行就不高亮 解决&#xff1a; 1、在 表格属性配置里&#xff0c; 把 current-changecurrentChange 写成 current-change"…

多账号矩阵管理系统技术嫁接开发源代码

多账号矩阵管理系统技术嫁接开发源代码 文章目录 一、剪辑部分源代码开发示例二、发布投放部分源代码示例 1.账号绑定一码多扫技术应用开发代码示例2.定时挂载投放源代码示例 一、剪辑部分源代码开发示例 创建工程项目 */ public function createProjectAction() { …

windows电脑如何设置通电自启

原来电脑是需要摁启动摁扭才能开机&#xff0c;现在需要给服务器设置成通电自启 开机后摁del或者F2键进入bois设置&#xff0c;再摁F7进入高级设置&#xff0c;进入Advanced---APM Configuration 进入后 Restore AC Power Loss选择开启。

Selenium教程__获取元素文本、属性值、尺寸(8)

本文将介绍如何使用Selenium来获取元素的文本内容、属性值和尺寸&#xff0c;并展示一些实际应用场景。 学习本文内容将能够轻松地获取并利用元素的相关信息&#xff0c;从而更好地进行元素的验证、操作和断言。 from selenium import webdriverdriver webdriver.Chrome() …

【软考网络管理员】2023年软考网管初级常见知识考点(16)-网络安全与病毒

涉及知识点 网络安全要素&#xff0c;DDOS攻击&#xff0c;网络安全威胁&#xff0c;常见的病毒类型&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;获…

RabbitMQ学习笔记3(小滴课堂)RabbitMQ的安装和web 管控台的讲解

在安装之前我们先要启动docker: docker pull rabbitmq:management 我们现在去运行rabbitmq&#xff1a; 我们可以看到rabbitmq的日志&#xff1a; 可以用之前学过的命令去查看已经运行的容器。 账号admin 密码password 就能登录进去了&#xff1a; 我们可以加一个虚拟主机。

matlab绘制指定球心坐标及半径球面

[x,y,z]sphere(40);%先绘制单位球面&#xff0c;后面都是对此基础上进行更改完成预期的球面&#xff0c;40为分割球面的块数 r2;%球面半径 xx*r;yy*r;zz*r; xx1;yy1;zz1;%球心坐标 axis equal; surf(x,y,z);%绘图axis tight;% 坐标轴样式 square shading flat;% 着色方式light(…

分布式锁工具 Redisson,贼香!!

一、Redisson概述 二、分布式锁 三、Redisson分布式锁 四、RLock 五、公平锁 六、总结 一、Redisson概述 什么是Redisson&#xff1f; Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式…

docker搭建redis

一、Docker搜索redis镜像 命令&#xff1a;docker search <镜像名称> docker search redis docker pull redis#若不加版本号默认下载最新版 三、Docker挂载配置文件 接下来就是要将redis 的配置文件进行挂载&#xff0c;以配置文件方式启动redis 容器。&#xff08;挂载&…

js通过原型链的形式封装方法为组件

首先我们可以看看下面一张图 控制区有两个功能&#xff0c;一方面是和前端做交互渲染&#xff0c;另一方面是调用缓存区中所返回回来的封装方法所产生的值 此处我们采用的是angular.js的形式 html文件为 <!DOCTYPE html> <html lang"en"><head>…

区块链运行原理

文章目录 前言区块链的结构区块链的交易过程区块链的共识机制区块链交易存在的问题特性总结 前言 上文《认识区块链》中可以知道区块链是一个通过各种加密算法、共识机制以及其他技术可以实现一个点对点的电子现金系统&#xff0c;从而达到去第三方的效果&#xff08;通常称之…

SNMP 计算机网络管理 实验3(三) SNMP协议工作原理验证与分析

&#x1f680;write in front&#x1f680; 一、实验目的 学习捕获SNMP报文&#xff0c;通过报文分析理解SNMP协议的工作过程。二、实验内容与设计思想 实验内容&#xff1a;编写代码&#xff0c;测试 1&#xff09;使用snmputilg发送SNMP数据包; 使用wireshark抓包&…

【css】实现单独一区域滚动,不影响整体滚动

来源&#xff1a;css实现单独一区域滚动&#xff0c;不影响整体滚动&#xff0c;两种方法 方法 第一种&#xff1a;就该区域高度固定&#xff0c;然后overflow-auto 第二种&#xff1a;使用属性overscroll-behavior: contain; .overfolw{position: absolute;width: 100%;ov…