[SQL系列] 从头开始学PostgreSQL 自增 权限和时间

[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询_Edward.W的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/u013379032/article/details/131841058上一篇介绍了事务,锁,子查询

事务有点像是原子操作,需要有完整性,要么全都完成了,要么全都没完成,事情不能只做一半。

锁主要两种,共享锁和排它锁,可读不可写以及不可读写,以及细粒度的行级锁。

子查询的话,其实就是嵌套的sql查询语句,和with有一定的相似。

这次我们来介绍点自增,权限和时间

自增

        自增,顾名思义就是自动增长,会在新纪录插入表中生成一个唯一的数字。

        我们插表的时候,总有一个id序号,这个一般设置为自增,可以显示有多少行,但是这个字段一般都不是我们插入的,否则我们不得了解下,上一次最后一行的id是多少,然后再增加上去,再插入?这时候,还是依靠postgres的关键字把。

PostgreSQL自增主要有三个范围:

smallserial   1-32767, 因为在磁盘中占据了2字节,所以就是2^16,因为一个字节是8位,用16位表示的最大范围就是32767

serial  1-2147483647,在磁盘中占据4字节,所以就是2^32

bigserial 1-9223372036854775801,在磁盘中占据8字节,所以就是2^64

我们直接来看个示例把:

#开始建表
CREATE TABLE biztest (  id SERIAL PRIMARY KEY,  name VARCHAR(255)  
);  #插入数据
INSERT INTO biztest (name) VALUES ('张三'); testdb=# select * from biztest;id | name 
----+------1 | 张三
(1 row)testdb=# INSERT INTO biztest (name) VALUES ('李四');  
INSERT 0 1
testdb=# select * from biztest;id | name 
----+------1 | 张三2 | 李四
(2 rows)

这边建了个表,并且在id字段上加上了serial标记,那么证明这个字段就是可以自增的。

可以看到我们插入数据的时候并没有插入id的值,但是id会随着自增上去。

权限

        在创建数据库对象的时候都会分配一个所有者,数据库的对象只有它的所有者才能够修改删除,要是要允许其他的用户角色使用它,就必须设置权限。

权限主要有以下的几种类型:

1. 访问权限(Access Privileges):决定了谁可以查询或修改特定的数据库对象或数据。访问权限可以通过以下几种方式进行控制:

  • SELECT 权限:允许用户查询特定的表、视图或其他数据库对象。
  • INSERT 权限:允许用户向特定的表、视图或其他数据库对象中插入数据。
  • UPDATE 权限:允许用户修改特定的表、视图或其他数据库对象中的数据。
  • DELETE 权限:允许用户从特定的表、视图或其他数据库对象中删除数据。

2. 插入权限(Insert Privileges):决定了谁可以向特定的表、视图或其他数据库对象中插入数据。插入权限可以通过以下几种方式进行控制:

  • INSERT 权限:允许用户向特定的表、视图或其他数据库对象中插入数据。
  • SELECT 权限:允许用户查询特定的表、视图或其他数据库对象,以便为插入操作做准备。

3. 查询权限(Query Privileges):决定了谁可以查询特定的数据库对象或数据。查询权限可以通过以下几种方式进行控制:

  • SELECT 权限:允许用户查询特定的表、视图或其他数据库对象。
  • JOIN 权限:允许用户执行连接操作,将一个表与另一个表或其他数据库对象进行连接。

4. 修改权限(Update Privileges):决定了谁可以修改特定的数据库对象或数据。修改权限可以通过以下几种方式进行控制:

  • UPDATE 权限:允许用户修改特定的表、视图或其他数据库对象中的数据。
  • DELETE 权限:允许用户从特定的表、视图或其他数据库对象中删除数据。

5. 控制权限(Control Privileges):决定了谁可以对数据库对象进行更改,例如增加、删除、修改列或约束等。控制权限可以通过以下几种方式进行控制:

  • ALTER 权限:允许用户对特定的表、视图或其他数据库对象进行更改,如添加、修改或删除列。
  • DROP 权限:允许用户删除特定的表、视图或其他数据库对象。

具体操作实例:

#创建一个叫做guest的角色
testdb=# create role guest;
CREATE ROLE#授予这个角色students表的select权限
testdb=# grant select on students to guest;
GRANT#授予sutends表的全部权限
testdb=# grant all on students to guest;
GRANT#回收授权
testdb=# revoke all on students from guest;
REVOKE#删除用户
testdb=# 
testdb=# drop user guest;
DROP ROLE
testdb=#

时间和日期

        数据库中除了基础的几种类型,比较特殊的应该就是时间和日期了。PostgreSQL支持以下的时间和日期类型:

  1. 时间类型:PostgreSQL 支持多种时间类型,包括时间戳类型(如 timestamptz、timestamp 类型)和时间区间类型(如 interval 类型)。其中,timeSTAMPTZ 类型包含时区信息,而 timestamp 类型不含时区信息。interval 类型表示时间间隔,如分钟、小时、天、月、年等。
  2. 日期类型:PostgreSQL 支持日期类型,包括日期类型(如 date 类型)和日期时间类型(如 datetime 类型)。日期类型表示日期,而日期时间类型表示日期和时间。
  3. 时间和日期函数:PostgreSQL 提供了丰富的时间和日期函数,如取当前时间、取当前日期、取当前时间戳、计算时间差等。例如,可以使用 now() 函数获取当前时间,使用 current_date 函数获取当前日期,使用 epoch 函数获取当前时间戳。
  4. 时间和日期格式化:PostgreSQL 提供了时间和日期格式化函数,如 to_char() 函数、to_date() 函数、to_timestamp() 函数等。这些函数可以将时间和日期转换为不同的格式,如字符串、日期时间类型等。

我们直接上个示例:

#创建一个表,里面包含了很多timestamptz和date的日期用于示例testdb=# create table teacher(
testdb(# id serial primary key,
testdb(# create_at timestamptz not null default now(),
testdb(# update_at timestamptz not null default now(),
testdb(# birthdate date not null
testdb(# );
CREATE TABLE#我们插入一个date类型,timestamptz已经设定了default,就不插入了
testdb=# insert into teacher (birthdate) values (current_date);
INSERT 0 1testdb=# select * from teacher;id |           create_at           |           update_at           | birthdate  
----+-------------------------------+-------------------------------+------------1 | 2023-07-21 14:05:51.588512+00 | 2023-07-21 14:05:51.588512+00 | 2023-07-21
(1 row)

以下是一些比较常用的函数:

  1. now():获取当前时间戳。
  2. current_date:获取当前日期。
  3. current_time:获取当前时间。
  4. epoch:获取当前时间戳(以秒为单位)。
  5. extract():从日期时间值中提取指定的时间单位(如年、月、日、小时、分钟等)。
  6. date_trunc():将日期时间值截断为指定的时间单位(如年、月、日、小时、分钟等)。
  7. date_add():将日期时间值添加或减去指定的时间单位(如年、月、日、小时、分钟等)。
  8. date_diff():计算两个日期时间值之间的时间差(以天、周、月、年等为单位)。
  9. date_format():将日期时间值格式化为指定的格式。
  10. date_parser():将字符串解析为日期时间值。
  11. time_add():将时间值添加或减去指定的时间单位(如小时、分钟等)。
  12. time_diff():计算两个时间值之间的时间差(以小时、分钟等为单位)。
  13. time_format():将时间值格式化为指定的格式。
  14. time_parser():将字符串解析为时间值。
  15. interval_add():将时间间隔值添加或减去指定的时间单位(如分钟、小时、天等)。
  16. interval_diff():计算两个时间间隔值之间的时间差(以指定的时间单位为单位)。
  17. interval_format():将时间间隔值格式化为指定的格式。
  18. interval_parser():将字符串解析为时间间隔值。

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

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

相关文章

win11我们无法创建新的分区也找不到现有的分区

U盘重装系统的时候 提示:win11我们无法创建新的分区也找不到现有的分区 ShiftF10 ,调出 命令提示符; diskpart list disk select disk 盘编号 clean convert gpt 参考:怎么解决我们无法创建新的分区也找不到现有的分区问题&#x…

STM32F407-- DMA使用

目录 1. DMA结构体 STM32F103: STM32F407: 2. F4系列实现存储器到存储器数据传输 1)结构体配置&初始化 2)主函数 补充知识点:关于变量存储的位置,关于内部存储器一般存储什么内容 3. F4系列实现…

C++OpenCV(4):图像截取与掩膜操作

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 文章目录 图像截取图像掩膜操作 图像截取 ROI操作,指的是:region of interest,感兴趣区域。 我们可以对一张…

Android Studio 修改AVD模拟器文件默认存储路径

AndroidStudio默认的模拟器文件路径为:C:\Users\用户名\.android\avd路径,通常windows系统上,C盘不是太大,而avd文件却不小,通常几个GB,所以有必要将avd路径换到一个非系统盘。 更换方法如下:H…

LocalDateTime、OffsetDateTime、ZonedDateTime之间的关系

什么是LocalDateTime? ISO-8601日历系统中不带时区的日期时间。 该类不存储时区,所以适合日期的描述,比如用于生日、deadline等等。 但是如果没有偏移量/时区等附加信息,一个时间是不能表示时间线上的某一时刻的。 什么是Offset…

20230720在ubuntu22.04系统下载+解密+合并ts切片的步骤(STEP-BY-STEP版本)

20230720在ubuntu22.04系统下载解密合并ts切片的步骤(STEP-BY-STEP版本) 2023/7/20 23:06 https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?type2&app_idapp1cE7gLFM1187&pro_idterm_645c69388953e_Nhew…

论文工具——ChatGPT结合PlotNeuralNet快速出神经网络深度学习模型图

文章目录 引言正文PlotNeuralNet安装使用使用python进行编辑使用latex进行编辑 样例利用chatGPT使用chatGPT生成Latex代码利用chatGPT生成对应的python代码 总结引用 引言 介绍如何安装PlotNeuralNet工具,并结合chatGPT减少学习成本,快速出图。将按照软…

前端Web实战:从零打造一个类Visio的流程图拓扑图绘图工具

前言 大家好,本系列从Web前端实战的角度,给大家分享介绍如何从零打造一个自己专属的绘图工具,实现流程图、拓扑图、脑图等类Visio的绘图工具。 你将收获 免费好用、专属自己的绘图工具前端项目实战学习如何从0搭建一个前端项目等基础框架项…

java学习(二):反射

系列文章目录 https://editor.csdn.net/md/?articleId131757340 文章目录 系列文章目录参考【1】注解1. 什么是注解2. 内置注解3. 元注解4.自定义注解 【2】反射--基本概念一、反射的基本概念1. 为什么要用反射?2. 什么是反射?3. 用和不用反射的区别&a…

代码随想录-回溯(组合问题)|ACM模式

目录 前言: 77.组合 题目描述: 输入输出示例: 思路和想法: 216. 组合总和 III 题目描述: 输入输出示例: 思路和想法: 17. 电话号码的字母组合 题目描述: 输入输出描述&a…

MyBatis的多表操作

1 MyBatis的多表操作 1.1 多表模型介绍 我们之前学习的都是基于单表操作的,而实际开发中,随着业务难度的加深,肯定需要多表操作的。 多表模型分类 一对一:在任意一方建立外键,关联对方的主键。 一对多:在…

实用便捷!一站式BI系统推荐

在企业数字化转型过程中,BI系统可以建立业务、数据的双驱引擎,形成业务、数据的互补作用,通过建立数字化技术架构,明确企业的战略定位和业务目标,从而支撑实现这个目标。而一站式BI系统,则是指可以轻松从数…

【MySQL】SQL性能分析 (七)

🚗MySQL学习第七站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 假如我们需要对SQL进行优化,我们就必须对他足够的了解,比如 对哪一类SQL进行优化(增删改查…

基于物联网网关的工业数据可视化平台有什么功能?

随着数字化浪潮的不断发展,工业数据的价值越来越重要。在企业利用数据的过程中,数据可视化是数字化系统中十分重要的一部分。然而,工厂多种设备、多种协议影响到系统的搭建使得企业无法获得全面的数据视图,也无法对整个生产流程进…

OJ练习第142题——路径总和 II

113. 路径总和 II 力扣链接:113. 路径总和 II 题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 Java代码(深度优先搜…

六边形架构

六边形架构 微服务系统架构微服务定义微服务系统设计 传统分层架构六边形架构参考资料 微服务系统架构 需求描述做什么的问题,架构描述怎么做的问题(描述组成系统的各部件及其之间的关系) 微服务定义 下面的定义来自周志明老师的 凤凰架构 微服务是一种通过多个小型…

【Linux】 由“进程”过渡到“线程” -- 什么是线程(thread)?

知识引入初识线程1.什么叫做进程?2.什么叫做线程?3.如何看待我们之前学习的进程? 理解线程创建线程函数调用1.线程一旦被创建,几乎所有资源都是被线程所共享的2.与进程之间切换相比,线程的切换 初识线程总结&#xff1…

使用 Docker 快速上手中文版 LLaMA2 开源大模型

本篇文章,我们聊聊如何使用 Docker 容器快速上手朋友团队出品的中文版 LLaMA2 开源大模型,国内第一个真正开源,可以运行、下载、私有部署,并且支持商业使用。 写在前面 感慨于昨天 Meta LLaMA2 模型开放下载之后,Git…

操作系统练习:进程间通信(共享内存方式)

说明 本文是《操作系统概念(第九版)》3.4节“进程间通信”的练习。 进程间通信主要由两种模型: 共享内存消息传递 本文使用共享内存的方式实现进程间的通信 创建消息生产者 创建生产者的主要操作包括: 定义共享内存的大小、名称,以及通…

netty知识集锦2

粘包半包 粘包半包解决方案, 1短链接,它的消息边界是从链接建立到链接断开 2.定长解码器:服务器端选最大长度的消息作为定长,客户端不足补齐,缺点造成浪费 netty协议设计与解析 Message编码解码