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主从复制读写分离集群 一、项…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
