PGSQL学习-基础表结构

1 访问数据库

创建好数据库后,你可以有三种方式访问数据库

  • 运行PostgreSQL的交互式终端程序,它被称为psql, 它允许你交互地输入、编辑和执行SQL命令。

  • 使用一种已有的图形化前端工具,比如pgAdmin或者带ODBC或JDBC支持的办公套件如DataGrip等来创建和管理数据库。

  • 使用多种绑定发行的语言中的一种写一个自定义的应用

psql访问

# psql 访问指定数据库
bash-4.2$ psql postgres
psql (14.12)
Type "help" for help.postgres=# # psql缺省访问,默认postgres数据库
bash-4.2$ psql
psql (14.12)
Type "help" for help.postgres=# # postgres=# 表示 当前数据库为postgres, #表示当前访问用户是数据库超级用户,=>则说明是普通用户

 查看pgsql版本信息

postgres=# select version();version                                                  
----------------------------------------------------------------------------------------------------------PostgreSQL 14.12 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

psql程序有一些不属于SQL命令的内部命令。它们以反斜线开头,“\

比如:

# \h 活着 \help 可以查看命令帮助文档
postgres=# \h
Available help:ABORT                            CHECKPOINT                       CREATE USER                      DROP TRIGGER# \c 连接到指定数据库
postgres=# \c mydb;
You are now connected to database "mydb" as user "postgres".
mydb=# # \l 列出所有的数据库
postgres=# \lList of databasesName    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +|          |          |             |             | postgres=CTc/postgrestemplate1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +|          |          |             |             | postgres=CTc/postgres
(3 rows)# \dn:列出当前数据库中的所有schema
mydb=# \dnList of schemasName  |  Owner   
--------+----------mydb_s | postgrespublic | postgres
(2 rows)# \d 表名 查看表结构
mydb=# \d mydb_s.test01Table "mydb_s.test01"Column |  Type   | Collation | Nullable | Default 
--------+---------+-----------+----------+---------id     | integer |           |          | # \q 退出psql连接

2 创建数据库

# 创建一个名字叫mydb的数据库
create database mydb;# 删除数据库
drop databse mydb;

3 创建schema

一个cluster可以有多个database,而一个database可以有多个shema,一个shema可以有多个表

也就是说pgsql的数据层次结构分了三层,database -> shema -> table

这样划分可以在同一个database中创建名字相同的表但是属于不同shema

每个database默认有一个public的shema,如果创建表时不指定shema则默认为public

这样,多个用户操作同一个数据库时可以避免出现表名冲突。而且一个数据库需要加载第三方应用的数据时可以单独放在一个shema中,避免了表的冲突,同时也位于同一个database

# 创建shema
create shema shema1;
# 删除shema,如果shema下有表则删除失败
drop shema shema1;
# 强制删除
drop shema shema1 cascade;# 查看databse下所有shema
\dn
mydb=# \dnList of schemasName  |  Owner   
--------+----------mydb_s | postgrespublic | postgres

4 创建table

CREATE TABLE table_name(column1 datatype,column2 datatype,.....
);

比如创建一个weather表,包含5个字段,此时weather表属于public shema

CREATE TABLE weather (city            varchar(80),temp_lo         int,           -- 最低温度temp_hi         int,           -- 最高温度prcp            real,          -- 湿度date            date
);

创建指定shema的表,在表名前显示指定shema名称

CREATE TABLE public.cities (name            varchar(80),location        point
);

\d 查看表

mydb=# \dList of relationsSchema |  Name   | Type  |  Owner   
--------+---------+-------+----------public | cities  | table | postgrespublic | weather | table | postgres

\d 表名 查看表结构

mydb=# \d citiesTable "public.cities"Column  |         Type          | Collation | Nullable | Default 
----------+-----------------------+-----------+----------+---------name     | character varying(80) |           |          | location | point                 |           |          | 

插入数据

insert into

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);

请注意所有数据类型都使用了相当明了的输入格式。那些不是简单数字值的常量通常必需用单引号(')包围 

 在weather表中插入一条数据

mydb=# insert into weather values('cq',19,30,3.0,'2024/06/21');
INSERT 0 1

还可以使用copy命令加载大量的数据

比如 

COPY weather FROM '/home/user/weather.txt';

查看表数据

select

mydb=# select * from weather;city | temp_lo | temp_hi | prcp |    date    
------+---------+---------+------+------------cq   |      19 |      30 |    3 | 2024-06-21
(1 row)

删除表

drop table 表名 [,表名];

基本对数据的操作都和mysql一致,语法都是sql语法,比如添加数据是insert,删除delete,更新update,查询select

5 事务

pgsql中同样适用事务来保证并发时数据的安全

事务最重要的一点是它将多个步骤捆绑成了一个单一的、要么全完成要么全不完成的操作。步骤之间的中间状态对于其他并发事务是不可见的,并且如果有某些错误发生导致事务不能完成,则其中任何一个步骤都不会对数据库造成影响

pgsql中开启事务使用begin,提交事务使用commit,回滚事务使用 rollback

开启一个事务需要将SQL命令用BEGINCOMMIT命令包围起来

BEGIN;
UPDATE accounts SET balance = balance - 100.00WHERE name = 'Alice';
COMMIT;

pgsql中也有保存点

利用保存点来以更细的粒度来控制一个事务中的语句。保存点允许我们有选择性地放弃事务的一部分而提交剩下的部分

# 开启事务
BEGIN;# 更新数据
UPDATE accounts SET balance = balance - 100.00WHERE name = 'Alice';
# 添加保存点
SAVEPOINT my_savepoint;
# 更新数据2
UPDATE accounts SET balance = balance + 100.00WHERE name = 'Bob';
# 出现业务错误,需要回滚
-- oops ... forget that and use Wally's account
# 回滚
ROLLBACK TO my_savepoint;
# 再次更新数据3
UPDATE accounts SET balance = balance + 100.00WHERE name = 'Wally';# 提交事务
COMMIT;

6 表的继承

pgsql中有表继承关系,也就是说一个表可以继承于另一个表,一般表达父子、所属关系,比如城市和首都,首都就属于城市

父表会包含子表信息,子表会继承父表字段

举例:

创建cities和capitals,分别表示城市和首都,首都继承城市,那么首都表拥有cities的所有字段和本身state字段

CREATE TABLE cities (name       text,population real,altitude   int     -- (in ft)
);CREATE TABLE capitals (state      char(2)
) INHERITS (cities);

查询所有cities时,会查询cities表和capitals表

比如:查询海拔高度>500的城市,则会返回cities和captials所有符合要求的

SELECT name, altitudeFROM citiesWHERE altitude > 500;

如果只想查询首都海拔高度的,则需要 from only

SELECT name, altitudeFROM ONLY citiesWHERE altitude > 500;

only标记可以用着各个语法中,比如 SELECTUPDATE 和DELETE 

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

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

相关文章

云计算安全扩展要求解读

云计算简介: 一种全新网络服务方式,将传统的以桌面为核 心的任务处理转变为以网络为核心的任务处理, 利用互联网实现自己想要完成的一切处理任务, 使网络成为传递服务、计算力和信息的综合媒 介,真正实现按需计算、多…

高级及架构师高频面试题-基础型

1、设计模式有哪些原则(待解释的更直白) 单一职责原则:一个类或方法应只负责一项职责,避免一个类因为多个变化原因而改变。开闭原则:软件实体应对扩展开放,对修改封闭。比如要增加用户类别的时候可以新增一…

【C++】选择语句-多行if语句

语法格式 if(条件) {条件满足后执行的操作} else {条件不满足执行的操作} 下面是一个实例 #include<iostream> using namespace std;int main() {//选择结构 - 多行if语句//输入考试分数&#xff0c;如果考试分数大于600&#xff0c;视为考上一本大学&#xff0c;在屏…

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时&#xff0c;dataGridView控件创建好后&#xff0c;左侧会多出一列为空&#xff0c;如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图&#xff1a; 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…

登顶官方热榜,“超级智能体创造营”一期获奖名单公开!

自超级智能体创造营活动7月11日上线以来&#xff0c;受到很多平台开发者的关注&#xff0c;很开心看到首期创造营聚集了诸多优秀的平台开发者&#xff0c;共同参与到主题创作中&#xff0c;提交了100 的创意智能体&#xff01; 经过官方伙伴历经多轮、多维度的专业评审&#x…

HDU1032——The 3n + 1 problem,HDU1033——Edge,HDU1034——Candy Sharing Game

目录 HDU1032——The 3n 1 problem 题目描述 运行代码 代码思路 HDU1033——Edge 题目描述 运行代码 代码思路 HDU1034——Candy Sharing Game 题目描述 运行代码 代码思路 HDU1032——The 3n 1 problem 题目描述 Problem - 1032 运行代码 #include <iostr…

电量采集模块—应用于工厂车间配电室电网监测系统的搭建

前言 随着社会经济发展&#xff0c;工厂配电电网系统的供电实时监测越来越重要&#xff0c;这不仅是影响工厂安全性&#xff0c;更是工厂自动化的必然环节。工厂电力监测具有长时间在线工作的可靠性、较强的现场操作和与中心站的通讯功能&#xff0c;同时具有长时间记录存储数据…

HarmonyOS 请求相应HTTPS概览

1.HTTP概述 请求和响应 2.HTTP请求开发步骤 2.1.module.json5中添加 ohos.permission.INTERNET 2.2.导入http模块 2.3.创建htppt请求 2.4.发起请求 2.5.处理响应 2.6.销毁http对象 3.几个基本概念&#xff1a; 3.1.Webview&#xff1a;提供We…

购买反向链接是明智的吗?

​在商业世界里&#xff0c;免费的午餐几乎是不存在。即便你的网站内容质量再好&#xff0c;也很难指望别人会无偿为你提供反向链接。购买反向链接绝对是明智的选择&#xff0c;纵观任何一个有排名的大网站&#xff0c;外链数量起码几千条打底&#xff0c;难不成你打算一条一条…

Linux的yum源安装MySQL5.7

linux的yum源安装MySQL5.7 一、MySQL 1、简介 MySQL 是一种流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典公司 MySQL AB 开发&#xff0c;后来被 Oracle Corporation 收购。它是一个开源软件&#xff0c;提供了高效、稳定和可靠的数据管理解决…

在 ArchLinux 上编译运行 axmol 引擎

本文将在 Windows 10 上安装 Arch WSL 中编译 axmol 请确保 WSL2 已正确安装 1. 在微软应用商店安装 ArchLinux 2. 打开 Arch&#xff0c;按照提示输入用户名和密码&#xff0c;尽量简单 3. 配置清华源&#xff0c;速度快的起飞&#xff0c;否则&#xff0c;各种包会安装失败…

Animate软件基础:复制、粘贴、删除或移动帧或帧序列

关键帧和其之后的常规帧范围称为关键帧序列。时间轴可以包含任意数量的关键帧序列。 FlashASer&#xff1a;Animate 2022零基础应用教程之教师篇https://zhuanlan.zhihu.com/p/555447498 FlashASer&#xff1a;Animate教程及作品源文件https://zhuanlan.zhihu.com/p/67743743…

Roadmap模板

https://www.officetimeline.com/roadmaps https://venngage.com/blog/product-roadmap/ https://roadmunk.com/guides/roadmap-definition/

数据结构 | LinkedList与链表

前言 ArrayList底层使用连续的空间,任意位置(尤其是0位置下标)插入或删除元素时,需要将该位置后序元素 整体 往前或往后搬移,故时间复杂度为O(N). 优点(给定一个下标,可以快速查找到对应的元素,时间复杂度为O(1))增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗.增容一…

Vue3计算属性终极实战:可媲美Element Plus Tree组件研发之节点勾选

前面完成了JuanTree组件的节点编辑和保存功能后&#xff0c;我们把精力放到节点勾选功能实现上来。**注意&#xff0c;对于组件的开发者来说&#xff0c;要充分考虑用户的使用场景&#xff0c;组件提供的多个特性同时启用时必须要工作良好。**就拿Tree组件来说&#xff0c;用户…

标准IO

目录 思维导图&#xff1a; 学习内容&#xff1a; 1. IO基础 2. 标准IO 2.1 标准IO提供的内容 2.2 FILE结构体 2.2.1 结构体解析 2.3 fopen 打开文件 2.4 fclose&#xff1a;关闭文件 例如&#xff1a; 2.5 fgetc\fputc:单字符的输入输出 例如&#xff1a; 2.6 错…

概率论--最大似然估计

目录 概念 基本原理 应用领域 实际应用案例 优缺点 优点&#xff1a; 缺点&#xff1a; 延伸 最大似然估计在机器学习中的具体应用案例是什么&#xff1f; 如何解决最大似然估计在处理小样本数据时的偏差问题&#xff1f; 最大似然估计与其他参数估计方法&#xff08…

uniapp手写滚动选择器

文章目录 效果展示HTML/Template部分&#xff1a;JavaScript部分&#xff1a;CSS部分&#xff1a;完整代码 没有符合项目要求的选择器 就手写了一个 效果展示 实现一个时间选择器的功能&#xff0c;可以选择小时和分钟&#xff1a; HTML/Template部分&#xff1a; <picker…

【文件fd】文件描述符fd | 文件描述表

目录 1.文件描述符fd 2.系统调用的0/1/2 3.C语言的stdin/stdout/stderr 4.系统调用的0/1/2和C语言的stdin/stout/stderr二者的关系❓ 5.文件描述表 5.1 文件描述符概念 5.3 文件对象strcut file 5.4 进程和文件对应关系 5.5 文件描述符理解 5.6 源码查看 1.文件描述…

AI行业合适做必应bing推广吗?怎么开户呢?

快速发展的AI行业中&#xff0c;有效的市场获客渠道是关键&#xff0c;随着数字营销领域的不断演进&#xff0c;必应Bing以其独特的市场定位、庞大的用户基础和高效的广告系统&#xff0c;成为AI企业推广策略中的重要一环。特别是针对那些寻求精准触达、高效转化的AI企业而言&a…