PGSQL学习-基础表结构

news2024/11/15 14:38:03

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=# \l
                                  List of databases
   Name    |  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/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

# \dn:列出当前数据库中的所有schema
mydb=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 mydb_s | postgres
 public | postgres
(2 rows)

# \d 表名 查看表结构
mydb=# \d mydb_s.test01
               Table "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=# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 mydb_s | postgres
 public | 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=# \d
          List of relations
 Schema |  Name   | Type  |  Owner   
--------+---------+-------+----------
 public | cities  | table | postgres
 public | weather | table | postgres

\d 表名 查看表结构

mydb=# \d cities
                       Table "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.00
    WHERE name = 'Alice';
COMMIT;

pgsql中也有保存点

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

# 开启事务
BEGIN;

# 更新数据
UPDATE accounts SET balance = balance - 100.00
    WHERE name = 'Alice';
# 添加保存点
SAVEPOINT my_savepoint;
# 更新数据2
UPDATE accounts SET balance = balance + 100.00
    WHERE name = 'Bob';
# 出现业务错误,需要回滚
-- oops ... forget that and use Wally's account
# 回滚
ROLLBACK TO my_savepoint;
# 再次更新数据3
UPDATE accounts SET balance = balance + 100.00
    WHERE 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, altitude
  FROM cities
  WHERE altitude > 500;

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

SELECT name, altitude
    FROM ONLY cities
    WHERE altitude > 500;

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

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

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

相关文章

Centos7_Minimal安装Cannot find a valid baseurl for repo: base/7/x86_6

问题 运行yum报此问题 就是没网 解决方法 修改网络信息配置文件,打开配置文件,输入命令: vi /etc/sysconfig/network-scripts/ifcfg-网卡名字把ONBOOTno,改为ONBOOTyes 重启网卡 /etc/init.d/network restart 网路通了

opencv 按键开启连续截图,并加载提示图片

背景图小图 键盘监听使用的是pynput 库 保存图片时使用了年月日时分秒命名 原图: from pynput import keyboard import cv2 import time# 键盘监听 def on_press(key):global jieglobal guanif key.char a:jie Trueelif key.char d:jie Falseelif key.char…

【深度学习】LLaMA-Factory 大模型微调工具, 大模型GLM-4-9B Chat ,微调与部署 (2)

资料: https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://www.53ai.com/news/qianyanjishu/2015.html 代码拉取: git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factorybuild镜像和执行镜像: …

如何借助生成式人工智能引领未来的科技狂潮

如何借助生成式人工智能引领未来的科技狂潮 1. 生成式AI的现状1.1 技术基础1.1.1 深度学习1.1.2 生成对抗网络(GANs)1.1.3 变分自编码器(VAEs) 1.2 主要应用1.2.1 语言模型1.2.2 图像生成1.2.3 音频与视频生成 2. 未来的发展趋势2…

2024/7/23 英语每日一段

As malware has improved and evolved, it has pushed defense software to require constant connection and more extensive control. That deeper access also introduces a far higher possibility that security software—and updates to that software—will crash the …

6.乳腺癌良性恶性预测(二分类、逻辑回归、PCA降维、SVD奇异值分解)

乳腺癌良性恶性预测 1. 特征工程1.1 特征筛选1.2 特征降维 PCA1.3 SVD奇异值分解 2. 代码2.1 逻辑回归、二分类问题2.2 特征降维 PCA2.3 SVD奇异值分解 1. 特征工程 专业上:30个人特征来自于临床一线专家,每个特征和都有医学内涵;数据上&…

SpringBoot启动命令过长

Error running DromaraApplication: Command line is too long. Shorten command line for DromaraApplication or also for Spring Boot default configuration?

探索LLM世界:新手小白的学习路线图

随着人工智能的发展,语言模型(Language Models, LLM)在自然语言处理(NLP)领域的应用越来越广泛。对于新手小白来说,学习LLM不仅能提升技术水平,还能为职业发展带来巨大的机遇。那么,…

matlab仿真 模拟调制(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书) clear all ts0.001; t0:ts:10-ts; fs1/ts; dffs/length(t); msgrandi([-3 3],100,1); msg1msg*ones(1,fs/10); msg2reshape(ms…

opencv grabCut前景后景分割去除背景

参考: https://zhuanlan.zhihu.com/p/523954762 https://docs.opencv.org/3.4/d8/d83/tutorial_py_grabcut.html 环境本次: python 3.10 提取前景: 1、需要先把前景物体框出来 需要坐标信息,可以用windows自带的画图简单提取像素…

敏捷CSM认证:精通敏捷Scum估算方法,高效完成项目!

咱们做项目的时候可能都遇到过这种情况:项目一开始信心满满,觉得 deadline 稳了。结果呢?各种意外状况频出,时间好像怎么都不够用了,最后项目只能无奈延期,整个团队都像霜打的茄子。 说到底,还…

Elasticsearch:Golang ECS 日志记录 - zap

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。 编码器以 JSON 格式记录日志,并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。 默认情况下,会添…

集合的概念

目录 概述 1 集合定义 1.1 基本定义 1.2 元素和集合的关系表述 1.3 集合分类 1.4 集合描述 1.5 集合关系描述 2 集合的运算 2.1 集合关系的定义 2.2 集合的运算 概述 在高等数学中,集合是指由一些具有共同特征的对象组成的整体。这些对象可以是数字、字母…

最短路径 | 743. 网络延迟时间之 Dijkstra 算法和 Floyd 算法

目录 1 基于 Dijkstra 算法1.1 代码说明1.2 完整代码 2 基于 Floyd 算法2.1 代码说明2.2 完整代码 前言:我在做「399. 除法求值」时,看到了基于 Floyd 算法的解决方案,突然想起来自己还没有做过最短路径相关的题。因此找来了「743. 网络…

灰色关联分析【系统分析+综合评价】

系统分析: 判断哪个因素影响最大 基本思想:根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理(去量纲、缩小变量范围) 熟练使用excel与其公式和固定&#xff08…

微服务安全——OAuth2详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

C语言数据结构:基于EasyX的飞机订票系统,有前端界面

数据结构课程设计说明书 学 院、系: 软件学院 专 业: 软件工程 班 级: 学 生 姓 名: 范 学 号: 设 计 题 目: 飞机订票系统 起 迄 日 期: 2024年6月18日~ 20…

笔记小结:现代卷积神经网络之批量归一化

本文为李沐老师《动手学深度学习》笔记小结,用于个人复习并记录学习历程,适用于初学者 训练深层神经网络是十分困难的,特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化(batch normalization)&#xf…

vue3 + ts 报错:Parsing error: Unexpected token : eslint

报错:Parsing error: Unexpected token : eslint 解决: 在 .eslintrc.json 文件中加入 "parser": "babel/eslint-parser"配置 “parser”: “babel/eslint-parser” 告诉 ESLint 在检查代码之前,先使用 Babel 的解析器…

lua 游戏架构 之 游戏 AI (三)ai_attack

这段Lua脚本定义了一个名为 ai_attack 的类,继承自 ai_base 类。 lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客文章浏览阅读119次。定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可以…