PostgreSQL的基础知识

embedded/2024/9/20 1:33:19/ 标签: postgresql, oracle, 数据库

什么是数据库

数据库(Database)是一个用于存储、检索、管理和分析数据的集合。它是按照一定的数据模型组织、存储的集合,具有统一的结构形式、定义的相互关系、制定的约束条件和一定的冗余度,以便于在各种用户、各种程序之间实现数据共享。数据库能够管理大量数据,并允许用户通过数据库管理系统(DBMS)来访问这些数据。

ORDBMS 术语

ORDBMS,即“Object Relational Database Management System”的缩写,直译为“对象关系数据库管理系统”。

一、基本概念

  1. 数据库数据库是一些关联表的集合,用于存储和管理大量数据。
  2. 数据表:表是数据的矩阵,在数据库中以二维表格的形式存在,类似于电子表格。
  3. :一列(数据元素)包含了相同的数据,如所有用户的姓名或地址。
  4. :一行(=元组,或记录)是一组相关的数据,代表一个实体或对象的完整信息。

二、数据完整性

  1. 主键:主键是表中每条记录的唯一标识,用于确保数据的唯一性和完整性。一个表中只能有一个主键。
  2. 外键:外键用于关联两个表,建立表之间的关系。外键的值必须是另一个表主键的有效值。
  3. 复合键:复合键(组合键)将多个列作为一个索引键,用于在表中唯一标识一行数据。
  4. 索引:索引是对数据库表中一列或多列的值进行排序的一种结构,类似于书籍的目录,用于加快数据的检索速度。
  5. 参照完整性:参照完整性要求关系中不允许引用不存在的实体,确保表之间的关系正确无误。

三、高级特性

  1. 函数:通过函数,可以在数据库服务器端执行指令程序,实现复杂的逻辑处理。
  2. 触发器:触发器是由SQL语句查询所触发的事件,用于在数据发生变化时自动执行预定义的操作,如检查数据完整性。
  3. 多版本并发控制(MVCC):一种并发控制机制,用于在多个用户同时访问数据库时保持数据的一致性。MVCC为每个用户提供一个数据库的“快照”,确保用户在事务内所做的修改对其他用户不可见,直到事务成功提交。
  4. 规则(RULE):规则允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)等。

四、数据类型

 1.数值类型

  •         整数类型:包括smallint(2字节)、integer(4字节)、bigint(8字节)等,用于存储整数值。这些类型在取值空间和存储范围上有所不同,应根据实际需求选择最合适的类型。
  • 浮点数类型:包括real(单精度浮点数)和double precision(双精度浮点数),用于存储需要高精度计算的数值。
  • 任意精度类型numericdecimal,用于存储任意精度的数值,适合需要高精度计算的场景,如金融领域。

2. 字符串类型

  • 固定长度字符串char(n),用于存储固定长度的字符串,如果存储的字符串长度小于指定的n,则会在后面填充空格直到长度为n。
  • 可变长度字符串varchar(n)character varying(n),用于存储可变长度的字符串,最大长度由n指定。如果存储的字符串长度小于n,则实际占用空间会根据字符串长度而定。
  • 无长度限制字符串text,用于存储长度不限的字符串。

3. 日期和时间类型

  • 日期类型date,用于存储日期值,不包含时间部分。
  • 时间类型time(无时区)和time with time zone(有时区),用于存储时间值。
  • 时间戳类型timestamp(无时区)和timestamp with time zone(有时区),用于存储日期和时间值,包括可选的时区信息。
  • 时间间隔类型interval,用于存储时间间隔。

4. 布尔类型

  • 布尔类型boolean,用于存储逻辑值,如真(true)或假(false)。

5. 二进制类型

  • 二进制类型bytea,用于存储二进制数据。

6. 枚举类型

  • 枚举类型:使用CREATE TYPE语句定义的枚举类型,包含一系列静态值集合,用于存储固定的值集。

7. 几何类型

  • 几何类型:包括点(point)、线(line)、矩形(box)、多边形(polygon)等,用于存储二维空间中的几何数据。

8. 数组类型

  • 数组类型:支持一维或多维数组,数组的元素可以是任何基本类型或用户定义的类型

PostgreSQL 语法

一、数据库的操作

        1.创建数据库

CREATE DATABASE dbname;  
-- 可以在创建时指定参数,如所有者、编码格式等  
CREATE DATABASE db_lbh WITH OWNER=postgres ENCODING='utf-8';

        2.修改数据库名称

ALTER DATABASE db_lbh RENAME TO db_lbh3;

         3.删除数据库

DROP DATABASE db_lbh3;

二、表操作

        1.创建表

CREATE TABLE student (  id INT,  name VARCHAR(30),  birthday DATE,  score NUMERIC(5,2)  
);

        2.修改表名

ALTER TABLE student RENAME TO student1;

        3.修改字段名

ALTER TABLE student1 RENAME id TO myid;

        4.添加字段

ALTER TABLE student1 ADD COLUMN new_column VARCHAR(20);

        5.删除字段

ALTER TABLE student1 DROP COLUMN birthday;

        6.修改字段类型

ALTER TABLE student1 ALTER COLUMN name TYPE VARCHAR(40);

        7.删除表

DROP TABLE student1;  
-- 如果表存在则删除  
DROP TABLE IF EXISTS student1;

 三、数据的查询与修改

        1.插入数据

INSERT INTO student VALUES (1, '张三', '2023-01-01', 90.5);  
-- 指定字段插入  
INSERT INTO student (id, name) VALUES (2, '李四');

        2.更新数据

UPDATE student SET name = '王五' WHERE id = 2;

        3.删除数据

DELETE FROM student WHERE id = 2;  
-- 删除多条数据  
DELETE FROM student WHERE id BETWEEN 1 AND 3;

        4.查询数据

SELECT * FROM student;  
-- 指定字段查询  
SELECT id, name FROM student;  
-- 条件查询  
SELECT * FROM student WHERE name LIKE '张%';

        5.多表查询

-- 隐式内连接  
SELECT student.name, class.name  
FROM student, class  
WHERE student.classid = class.id;  -- 显示内连接  
SELECT student.name, class.name  
FROM student  
INNER JOIN class ON student.classid = class.id;

四、常见

        1.为用户赋予表的权限

GRANT SELECT ON table_name TO username;  
-- 授予所有权限  
GRANT ALL PRIVILEGES ON table_name TO username;

        2.子查询

SELECT * FROM table_a WHERE id IN (SELECT id FROM table_b);


http://www.ppmy.cn/embedded/108346.html

相关文章

浅聊kubernetes RBAC

RBAC 基于角色(Role)的访问控制(RBAC)是一种基于组织中用户的角色来调节控制对计算机或网络资源的访问的方法。 RBAC 鉴权机制使用 rbac.authorization.k8s.io API 组来驱动鉴权决定, 允许你通过 Kubernetes API 动态…

C++学习笔记(8)

184、基于范围的 for 循环 对于一个有范围的集合来说,在程序代码中指定循环的范围有时候是多余的,还可能犯错误。 C11 中引入了基于范围的 for 循环。 语法: for (迭代的变量 : 迭代的范围) { // 循环体。 } 注意: 1)迭…

实践reflex:项目架构解析

reflex 是一个使用纯Python构建全栈web应用的库,但是需要使用node,所以你懂的。 reflex安装:实践reflex:一个使用纯Python构建全栈web应用的库-CSDN博客 创建hello项目 (base) skyub:~$ mkdir hello (base) skyub:~$ cd hello/…

【Azure Redis】Redis-CLI连接Redis 6380端口始终遇见 I/O Error

问题描述 使用Redis-cli连接Redis服务,因为工具无法直接支持TLS 6380端口连接,所以需要使用 stunnel 配置TLS/SSL服务。根据文章(Linux VM使用6380端口(SSL方式)连接Azure Redis (redis-cli & stunnel) : https://www.cnblogs.com/luligh…

模型训练套路(二)

接模型训练套路(一)http://t.csdnimg.cn/gZ4Fm 得到预测的值:preds[1][1], 输出目标:inputs target [0][1]; 查看两者的正确率,就看:predsinputs target 输出的结果&#xff1a…

前端WebSocket客户端实现

// 创建WebSocket连接 var socket new WebSocket(ws://your-spring-boot-server-url/websocket-endpoint);// 连接打开时触发 socket.addEventListener(open, function (event) {socket.send(JSON.stringify({type: JOIN, room: general})); });// 监听从服务器来的消息 socke…

K8S日志收集

本章主要讲解在 Kubernetes 集群中如何通过不同的技术栈收集容器的日志,包括程序直接输出到控制台日志、自定义文件日志等。 一、有哪些日志需要收集 为了更加方便的处理异常,日志的收集与分析极为重要,在学习日志收集之前,需要知…

QT基础 QPropertyAnimation简单学习

目录 1.简单介绍 2.使用步骤 3.部分代码示例 4.多项说明 5.信号反馈 6.自定义属性 1. 定义自定义属性 2. 使用 QPropertyAnimation 动画化自定义属性 3. 连接信号和槽 4.注意事项 7.更多高级示例 1.简单介绍 QPropertyAnimation是Qt中的一个类,用于实现属性…

idea安装并使用maven依赖分析插件:Maven Helper

在 IntelliJ IDEA 中安装并使用 Maven Helper 插件可以帮助你更方便地管理 Maven 项目的依赖,比如查看依赖树、排除冲突依赖等。以下是安装和使用 Maven Helper 插件的步骤: 安装 Maven Helper 插件 打开 IntelliJ IDEA 并进入你的项目。 在 IDE 的右下…

百度飞浆OCR半自动标注软件OCRLabel配置【详细

今天帮标注人员写了一份完整的百度飞浆OCR标注软件的安装配置说明书、以供标注人员使用 包括各种环境安装包一起分享出来【conda\python\label项目包、清华源配置文件、pycharm社区版安装包】 提取码:umys 1、解压并安装tools文件下的miniconda,建议安装在D盘下的…

Win32绕过UAC弹窗获取管理员权限

在早些年写一些桌面软件时,需要管理员权限,但是又不想UAC弹窗,所以一般是直接将UAC的级别拉到最低,或者直接禁用UAC的相关功能。 什么是UAC(User Account Control) 用户帐户控制 (UAC) 是一项 Windows 安全功能,旨在保…

Flink SQL 中常见的数据类型

Flink SQL 中常见的数据类型 目标 通过了解Flink SQL 中常见的数据类型,掌握正确编写Flink SQL 语句背景 Apache Flink 支持多种数据类型,这些数据类型被用于 Flink SQL 表达式、Table API 以及 DataStream API 中。以下是 Flink SQL 中常见的数据类型: 基本数据类型 Boo…

<Rust>egui学习之部件(十一):如何在窗口中添加单选框radiobutton部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第十一篇…

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer>…

学习整理使用jquery实现获取相同name被选中的多选框值的方法

学习整理使用jquery实现获取相同name被选中的多选框值的方法 <html><head><meta charset"gbk"><!-- 引入JQuery --><script src"https://www.qipa250.com/jquery/dist/jquery.min.js" type"text/javascript"><…

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务&#xff0c;‌它允许用户通过简单的配置&#xff0c;‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发…

现代计算机中数字的表示与浮点数、定点数

现代计算机中数字的表示与浮点数、定点数 导读&#xff1a;浮点数运算是一个非常有技术含量的话题&#xff0c;不太容易掌握。许多程序员都不清楚使用操作符比较float/double类型的话到底出现什么问题。这篇文章讲述了浮点数的来龙去脉&#xff0c;所有的软件开发人员都应该读…

【网络安全】服务基础第二阶段——第三节:Linux系统管理基础----Linux用户与组管理

目录 一、用户与组管理命令 1.1 用户分类与UID范围 1.2 用户管理命令 1.2.1 useradd 1.2.2 groupadd 1.2.3 usermod 1.2.4 userdel 1.3 组管理命令 1.3.1 groupdel 1.3.2 查看密码文件 /etc/shadow 1.3.4 passwd 1.4 Linux密码暴力破解 二、权限管理 2.1 文件与目…

封装触底加载组件

&#xff08;1&#xff09;首先创建一个文件名为&#xff1a;InfiniteScroll.vue <template><div ref"scrollContainer" class"infinite-scroll-container"><slot></slot><div v-if"loading" class"loading-sp…

nginx 新建一个 PC web 站点

注意&#xff1a;进行实例之前必须完成nginx的源码编译。&#xff08;阅读往期文章完成步骤&#xff09; 1.编辑nginx的配置文件&#xff0c;修改内容 [rootlocalhost ~]# vim /usr/local/nginx/conf/nginx.conf 2.创建新目录/usr/local/nginx/conf.d/&#xff0c;编辑新文件…