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主从复制读写分离集群 一、项…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...