Postgresql 基础使用语法
1.数据类型
1.数字类型
类型 长度 说明 范围 与其他db比较
Smallint 2字节 小范围整数类型 32768到+32767
integer 4字节 整数类型 2147483648到+2147483647
bigint 8字节 大范围整数类型 -9233203685477808到+9223203685477807
decimal 可变 用户指定 精度小数点前131072位;小数点后16383位
numeric 可变 用户指定 精度小数点前131072位;小数点后16383位
real 4字节 变长,不精确 6位十进制精度
double precision 8字节 变长,不精确 15位十进制精度
smallserial 2字节 smallint I自增序列 1到32767
serial 4字节 Integer自增序列 1到2147483647
bigserial 8字节 bigint自增序列 1到922372036854775807
money 8字节 金钱类型
- 字符类型
| 类型 | 长度 | 说明 |
| varchar(n),character varying(n) | 变长 | 字符最大数有限制 |
| char(n),character(n) | 定长 | 固定长度字符串字符数没达到最大值则使用空白填充 |
| text | 变长 | 无长度限制 |
- 日期时间
类型 长度 说明 范围 与其他db比较

- 基本操作
2.1数据库操作
//创建数据库
CREATE DATABASE 库名
//在创建数据库时指定参数信息 WITH OWNER:所有者 ENCODING:编码格式
CREATE DATABASE 库名 WITH OWNER = postgres ENCODING = ‘utf-8’
//修改数据库名称
ALTER DATABASE 旧库名 RENAME TO 新库名
//修改连接限制数
ALTER DATABASE 库名 CONNECTION LIMIT 20
//删除数据库
DROP DATABASE 库名
2.2表操作
//创建表
CREATE TABLE 表名(
字段1 类型1,
字段2 类型2
);
例:
一,class_info表
create table class_info
(
id serial not null
constraint class_info_pk
primary key,
name varchar,
write_date timestamp
);
serial not null constraint student_pk primary key,
"serial" 列被设置为 "not null",并且有一个名为 "student_pk" 的主键约束。
主键的作用是确保表中的每个数据行都可以被唯一地标识,并且主键值不能重复或为空。在创建主键约束后,系统会自动检查插入的数据是否违反了主键的唯一性要求,如果有重复的主键值或缺少主键值,就会抛出错误,阻止插入操作。
comment on table student is '学生表'; comment on column student.name is '名称';
给名为 student 的表添加注释,注释内容为 '学生表',用于描述表的作用或用途。
-- id serial not null 表示id自增 -- id integer not null 表示id不自增
二,studen 表
create table student
(
id serial not null
constraint student_pk
primary key,
name varchar,
class_id integer references "class_info"("id"), //references 外键
height numeric,
weight numeric,
write_date timestamp
);
//外键
外来键是一个(或数个)指向另外一个表格主键的栏位。
假设我们有两个表格:一个 CUSTOMER 表格,里面记录了所有顾客的资料;另一个 ORDERS 表格,里面记录了所有顾客订购的资料。在这里的一个限制,就是所有的订购资料中的顾客,都一定是要跟在 CUSTOMER 表格中存在。在这里,我们就会在 ORDERS 表格中设定一个外来键,而这个外来键是指向 CUSTOMER 表格中的主键。这样一来,我们就可以确定所有在 ORDERS 表格中的顾客都存在 CUSTOMER 表格中。换句话说,ORDERS表格之中,不能有任何顾客是不存在于 CUSTOMER 表格中的资料。
CUSTOMER 表格
| 栏位名 | 性质 |
| SID | 主键 |
| Last_Name | |
| First_Name |
ORDERS 表格
| 栏位名 | 性质 |
| Order_ID | 主键 |
| Order_Date | |
| Customer_SID | 外来键 |
| Amount |

2.3表操作
//修改表名
ALTER TABLE 旧表名 RENAME TO 新表名
//修改字段名
ALTER TABLE 表名 RENAME 旧字段 TO 新字段
//修改字段类型
ALTER TABLE 表名 ALTER COLUMN 字段 TYPE 类型(VARCHAR(40))
//删除字段
ALTER TABLE 表名 DROP COLUMN 字段
//添加字段
ALTER TABLE 表名 ADD COLUMN 字段 类型
//删除表
DROP TABLE 表名
//删除前进行判断
DROP TABLE IF EXISTS 表名
一般drop table if exists是数据库里面的,后面接表名如:drop table if exists xxx_book意思就是:如果数据库中存在xxx_book表,就把它从数据库中drop掉。
2.4往表中插入数据
//插入数据
INSERT INTO 表名 VALUES(1,'阿道夫','2022-10-10',NULL)
//指定字段插入数据
INSERT INTO 表名 (id,name) VALUES (‘2’,’王老五’);
批量导入
//将表数据插入到新表中
INSERT INTO 新表名 SELECT * FROM 表名;
//指定字段批量插入
INSERT INTO student1 (id,name) SELECT id, name FROM student;
往新表中插入其他表的指定字段数据
INSERT INTO employee (e_id, name) SELECT id, name FROM company WHERE name IS NOT NULL;
//往employee(e_id) 和 (name) 字段 插入 company表的 id name字段的值 如果name不为空的话
2.5 修改表数据
//更新数据,将id等于2的用户名改成'张三' ,如果不指定更新条件,会全局更新
UPDATE 表名 SET name = ‘张三’ WHERE id = 2
2.6删除表数据
//删除id等于2的表数据
DELETE FROM 表名 WHERE id = 2
//删除id在1到3的表数据
DELETE FROM student WHERE id BETWEEN 1 and 3;
//清空数据表
DELETE from student;
TRUNCATE TABLE student;
2.7表查询
//查询所有字段内容
SELECT * FROM 表名
//批量字段查询
SELECT id, name FROM student;
// 多表查询
SELECT student.name, student1.name FROM student;
// 给表取别名后查询,简化代码
SELECT s.id, s.name FROM student s;
2.7.1单表指定条件查询
//in关键字查询 查询id为1,3,5的成员
SELECT id,name FROM 表名 WHERE id IN (1,3,5)
//between and 关键字查询,在什么之间
SELECT id,name,birthday FROM 表名 WHERE birthday BETWEEN '2020-10-10' AND '2024-10-10'
//模糊查询,查询所有姓张的用户
SElECT id, name FROM 表名 WHERE name LIKE ‘张%’
2.7.2单表指定条件复杂查询
//查询所有字段内容
SELECT * FROM student;
//只显示前3条数据
SELECT * FROM student LIMIT 3;
//查询三条数据,从第二条开始
SELECT * FROM student LIMIT 3 OFFSET 2;
//查询姓名非空内容
SELECT id,name FROM student where name is NOT null;
// 1 or 3 :1与3 ;ORDER BY id ASC 按id升序 ORDER BY id DESC 按id降序 默认升序
SELECT id,name FROM student where id=1 OR id=3 ORDER BY id ;
2.7.3 多表查询
//创建一个班级表,id为主键 id int PRIMARY KEY,
//创建学生表,id为主键,classid为外键,关联表class的id
CONSTRAINT pk_student_id FOREIGN KEY(classid) REFERENCES class(id)
//隐式内连接,关联classid显示student成员所在班级
SELECT student.id, class.id,student.name, class.name FROM student, class WHERE student.classid = class.id;
//显示内连接,INNER JOIN不返回空值;LEFT JOIN 左连接,RIGHT JOIN 右连接,不能匹配的数据也返回
//INNER JOIN,所以结果中只返回匹配的数据,不会有空值出现。
SELECT student.id, class.id,student.name, class.name
FROM student INNER JOIN class ON student.classid = class.id ;
例子:
SELECT c.id, c.name,c.address,e.huji,e.work_time,e.phone
FROM employee AS e
INNER JOIN company AS c ON e.e_id = c.id;

子查询
子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。
一个 SELECT 语句的查询结果能够作为另一个语句的输入值
//EXISTS关键字子查询
SELECT * FROM student WHERE EXISTS
(SELECT class.id FROM class WHERE class.name = '二班' AND student.classid = class.id);
//IN 关键字子查询
SELECT * FROM student WHERE student.classid IN
(SELECT class.id FROM class WHERE class.name = '二班' );
查询结果合并操作
UNION 可去重复 执行速度慢
UNION ALL 不可去重复 执行速度快
- 运算符
3.1算术运算符 + - * %
3.2比较运算符 = 返回t f
3.3 逻辑运算符 NOT(逻辑非) AND(逻辑与) OR(逻辑或)
//判断2是否在1~3之间 T
SELECT 2 BETWEEN 1 AND 3;
//判断2是否在234集合中 T
SELECT 2 in (2,3,4);
//like运算符模糊匹配 %代表多个字符 _代表一个字符
SELECT 'abc' LIKE 'a%', --T
'abc' LIKE '_a_', --F
'abc' LIKE '_b_', --T
'abc' NOT LIKE '_b_'; --F
SELECT LEAST(1,2,3), --返回最小值:1
GREATEST(1,2,3); --返回最大值:3
- 函数
4.1数值函数

SELECT 函数(字段名) from 表名; !!!!!
4.2字符串函数

SELECT 函数(字段名) from 表名;!!!!
4.3日期时间函数

CURRENT_DATA = 2023-08-03
CURRENT_TIME = 18:18:01.412198+08
NOW = 2023-08-03 18:18:01.412198+08
EXTRACT使用 (相当于转换时间格式)

- 自定义函数
CREATE FUNCTION //声明创建函数
ADD(INTEGER,INTEGER) //定义函数名称
RETURNS INTEGER //定义函数返回值
AS'SELECT $1 + $2;' //定义函数体
LANGUAGE SQL //用以实现函数的语言名字
RETURNS NULL ON NULL INPUT; //定义参数为NULL时处理情况
例子:

- 数据库索引
使用索引的优缺点

优点:
通过创建唯一的索引,可以保证数据库表中每一行数据的唯一性。
可以大大提高查询速度
加速表与表之间的连接
减少查询中分组和排序的时间
缺点:
创建和维护索引耗费时间,数据量越多耗费的时间越多
索引需要占用物理空间
对表的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据的维护速度。
//-- 创建索引 此处默认使用B-tree
CREATE INDEX student_name_index ON student(name);
//-- 删除索引
DROP INDEX student_name_index;
- 数据库视图
使用视图具有 简单化、安全性、逻辑数据独立性
--创建视图top3,展示id,name,birthday 条件是id<=3 并且按id降序
CREATE VIEW top3 AS SELECT id,name,birthday FROM student where id <= 3 ORDER BY id desc;
--查看视图
SELECT * FROM top3;

--删除视图
DROP VIEW top3;
- 主键` 外键
主键 使用PRIMARY KEY语句设置为主键
外键 CONSTRAINT pk_student_id FOREIGN KEY(classid) REFERENCES class(id) 关联其他表的主键
- 约束
主键与约束的区别,主键的值是非空加唯一,且一个表只能有一个主键,可以有多个约束
-
- // UNIQUE 唯一约束
- // NOT NULL 非空约束
- // DEFAULT 默认值约束
例子:
CREATE TABLE student(
id INT UNIQUE, // UNIQUE 唯一约束
name VARCHAR(30) NOT NULL, // NOT NULL 非空约束
birthday DATE,
score NUMERIC(5,2) DEFAULT 0.0 // DEFAULT 默认值约束
);
相关文章:
Postgresql 基础使用语法
1.数据类型 1.数字类型 类型 长度 说明 范围 与其他db比较 Smallint 2字节 小范围整数类型 32768到32767 integer 4字节 整数类型 2147483648到2147483647 bigint 8字节 大范围整数类型 -9233203685477808到9223203685477807 decimal 可变 用户指定 精度小…...
Qt 之 QDebug,QString
文章目录 前言一、QDebug二、QString总结 前言 一、QDebug QDebug是Qt中用于进行调试和输出日志的类。它提供了一种便捷的方式来输出各种类型的数据,并可轻松地与流式输出一起使用,方便调试和查看程序的运行情况。 引入QDebug: 在使用QDebug…...
【C++】面试题
1、都说c是面向对象的语言,面向对象的三个特性能 [展开] 介绍一下吗? 封装:封装是一种集中管理的思想,把内部的数据和实现方法组合在一起,并且不对外暴漏内部的数据和实现方法,只对外提供几个接口来完成函数…...
机器学习算法之-逻辑回归(1)
什么是回归 回归树,随机森林的回归,无一例外他们都是区别于分类算法们,用来处理和预测连续型标签的算法。然而逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问…...
JAVA多线程和并发基础面试问答(翻译)
JAVA多线程和并发基础面试问答(翻译) java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序…...
正中优配:2023新股上市涨跌幅规则?新股上市涨跌幅限制为几天?
A股与美股不同,股票存在涨跌幅限制,那么,2023新股上市涨跌幅规矩?新股上市涨跌幅限制为几天?下面正中优配为我们预备了相关内容,以供参阅。 2023年新股上市涨跌幅存在以下规矩: 1、主板初次公开…...
如何查看线程在哪个cpu核上
1、ps -eLF查看PSR值 2、 taskset -pc $pid(进程/线程) 参考链接:https://blog.csdn.net/test1280/article/details/87993669...
【Vue前端】设置标题用于SEO优化
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 1.vue全局配置2.创建并暴露getPageTitle方法3.通过全局前置守卫设置title4.页面上引用title5.项目使用中英文翻译,title失效 1.vu…...
maven install
maven install maven 的 install 命令,当我们的一个 maven 模块想要依赖其他目录下的模块时,直接添加会找不到对应的模块,只需要找到需要引入的模块,执行 install 命令,就会将该模块放入本地仓库,就可以进…...
Vue.js2+Cesium1.103.0 七、Primitive 绘制航线元素
Vue.js2Cesium1.103.0 七、Primitive 绘制航线元素 用 Primitive 绘制航线元素,包括航点图标,航线线段,线段距离标注,航点序号,海拔标注,总航程等信息。 可同时绘制多条航线;可根据 id 清除指…...
Mybatis 源码 ④ :TypeHandler
文章目录 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定义 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…...
RabbitMQ和JMeter,一个完美的组合!优化你的中间件处理方式
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息中间件,它是基于Erlang语言编写的,并发能力强,性能好,是目前主流的消息队列中间件之一。 RabbitMQ的安装可参照官网( https://www.rabbitmq.c…...
WARNING: IPv4 forwarding is disabled. Networking will not work
当我在运行某条语句的时候 docker run -it -p 30001:22 --namecentos-ssh centos /bin/bash 提示 WARNING: IPv4 forwarding is disabled. Networking will not work. 解决: vim /usr/lib/sysctl.d/00-system.conf net.ipv4.ip_forward1 systemctl restart networ…...
SpringBoot复习:(40)@EnableConofigurationProperties注解的用法
一、配置文件: server.port9123 二、配置类: package cn.edu.tju.config;import com.mysql.fabric.Server; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigu…...
Live Market是如何做跨境客户服务的?哪些技术赋能?
在面对不同的海外市场和用户群体时,如何进行有效地出海营销是跨境商家面临的挑战。其中消费者服务管理和卖家保障尤其关键,如何做好客户服务管理?包括处理好客户投诉,提升消费者满意度是所有跨境商家和品牌独立站卖家非常重视的问题。 在数字化浪潮席卷之下&#…...
2023年7月京东洗衣机行业品牌销售排行榜(京东数据分析软件)
2023年上半年,洗衣机市场表现平淡,同环比来看出货量都有一定程度的下滑。7月份,洗衣机市场仍未改变这一下滑态势。 根据鲸参谋电商数据分析平台的相关数据显示,7月份,京东平台洗衣机的销量为109万,环比下降…...
【0214】postgres后端进程session退出,如何通过日志分析其会话信息
文章目录 1. postgres进程session退出2. 开启日志记录postgres进程会话状态3. postgres进程会话结束,记录日志的实现原理1. postgres进程session退出 默认情况下,新建一个postgres后端进程会话(session),或是postgres进程正常/异常退出时,日志中没有很明显的记录用于说明…...
Rust 重载运算符|复数结构的“加减乘除”四则运算
复数 基本概念 复数定义 由实数部分和虚数部分所组成的数,形如a+bi 。 其中a、b为实数,i 为“虚数单位”,i -1,即虚数单位的平方等于-1。 a、b分别叫做复数a+bi的实部和虚部。 当b0时,a&…...
Oracle删除表空间
1.检查表空间状态 SELECT tablespace_name, status FROM dba_tablespaces;备注:tablespace_name表示删除表空间的名称,status为表空间的状态。如果状态为ONLINE,表示表空间当前正在使用,不能被删除。 2.关闭表空间 ALTER TABLE…...
Mysql - 配置Mysql主从复制-keepalived高可用-读写分离集群
目录 高可用: 为什么需要高可用呢? 高可用的主要作用: keepalived是什么?它用在哪里? 什么是VRRP协议,它的作用是什么? 搭建一个基于keepalived的高可用Mysql主从复制读写分离集群 一、项…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
