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

news2024/11/28 6:47:17

[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 1


testdb=# 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.coloradmin.cn/o/777858.html

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

相关文章

【目标跟踪】2、FairMOT | 平衡多目标跟踪中的目标检测和 Re-ID 任务 | IJCV2021

文章目录 一、背景二、方法2.1 Backbone2.2 检测分支2.3 Re-ID 分支2.4 训练 FairMOT2.5 Online Inference 三、效果3.1 数据集3.2 实现细节3.3 消融实验3.4 最终效果 论文:FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracki…

基于大模型的Text2SQL微调的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

(转载)基于 BP_Adaboost 的强分类器设计(matlab实现)

本博客的完整代码获取: https://www.mathworks.com/academia/books/book106283.html 1案例背景 1.1 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为:首先给出弱学习算法和样本空间(x,y),从样本空间中找出m组训练数…

Postman传递对象参数(包含有集合对象)

postman通常需要传递各式各样的参数,本文主要介绍了Postman传递对象参数(包含有集合对象),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目场景: postman通常需要传递各式各样的参数,这样的话,进行…

自然语言处理与词嵌入

1、词表特征 前面介绍过表征单词的方式是首先建立一个较大的词汇表(例如10000),然后使用one-hot的方式对每个单词进行编码。例如单词Man,Woman,King,Queen,Apple,Orange分别出现在词…

Docker数据管理和网络通信 dockerfile

Docker数据管理和网络通信 dockerfile 一:Docker 的数据管理1.数据卷2.数据卷容器 二:端口映射三:容器互联(使用centos镜像)四:Docker 镜像的创建1.基于现有镜像创建2&am…

C++入门先填坑

C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C学习也有一定的帮助。 C入门先填坑系列主要内容会围绕以下方面 补充C语言语法的不足,以及C是如何对C语言设计不…

servlet Filter与spring的OncePerRequestFilter

servlet 规范 javax.servlet Filter 任何的servlet容器都要实现的,例如tomcat、undertow、jetty等等。类似于jdbc规范,制定好了一个约束,各家数据库厂商根据规范开发对应的驱动来实现访问自己的数据库。 spring 对于Filter的自定义实现 所…

NLP(六十)Baichuan-13B-Chat模型使用体验

2023年7月11日,百川智能正式发布参数量130亿的通用大语言模型Baichuan-13B-Base、对话模型Baichuan-13B-Chat及其INT4/INT8两个量化版本。   本文将介绍大模型BaiChuan-13B-Chat的使用体验,其HuggingFace网址为:https://huggingface.co/bai…

【C语言day02】

转义字符 \\ 表示字符\,\123表示字符{,\t表示制表符,这些都是一个字符宏只是替换 替换后NUM的样子是(211)*21/2常量指针与指针常量 const和* 来区别,如果是const * 这样的顺序就是常量指针,所以说他的本质是指针&am…

uni-app:请求后端数据uni.request

完整代码: onLoad() {uni.request({url: getApp().globalData.position Produce/select_employee,data: {username: getApp().globalData.username,},method: POST,dataType: json,success: res > {this.employee_name res.data.info.employee_name;// consol…

uniapp 之 微信小程序、支付宝小程序 对于自定义导航栏的不同

目录 前言 微信小程序 代码 支付宝小程序 首页配置文件 二级菜单页面 配置 总结 不同 相同 前言 小程序都是 uni-app 写的 不是原生 微信小程序 代码 pages.json文件中配置 重点: "navigationStyle": "custom", // 导航栏样式…

安卓开发日记问题记录(隐藏标题栏中的应用名称)

当我们设置了显示标题栏,应用名也会显示出来,这对设置标题栏内容很不方便 可以在activity里的onCreate部分设置这句代码隐藏APP名字 getSupportActionBar().setDisplayShowTitleEnabled(false);或者改变它 getSupportActionBar().setTitle("new …

疲劳驾驶检测和识别1: 疲劳驾驶检测和识别数据集(含下载链接)

疲劳驾驶检测和识别1: 疲劳驾驶检测和识别数据集(含下载链接) 目录 疲劳驾驶检测和识别1: 疲劳驾驶检测和识别数据集(含下载链接) 1. 前言 2. 疲劳驾驶类别说明 3. 疲劳驾驶检测数据集: (1)Drowsy-Driving-Det1 …

hadoop安全保护机制(kerberos + ldap)

信息安全理论: CIA模型:机密性、完整性和可用性 CIA模型能够帮助建议一些信息安全原则,但该模型并不是一个需要严格遵守的规则 hadoop平台可能设计多个CIA模型组件,也kennel一个也不涉及 机密性: 信息只应该被期望的…

高压放大器的增益和偏压是什么意思

高压放大器是一种广泛应用的电子元器件,主要用于放大高压信号和驱动负载等方面。在实际应用中,了解高压放大器的增益和偏压是非常重要的,下面安泰电子将详细介绍它们的意义和作用。 高压放大器的增益 增益是指放大器输入信号与输出信号之间的…

iClient3D for CesiumWebGL入门之使用vscode以服务方式运行调试

作者:超图研究院技术支持中心-于丁 iClient3D for Cesium&WebGL入门之使用vscode以服务方式运行调试 相信大家第一次使用SuperMap iClient3D for Cesium或SuperMap iClient3D for WebGL的时候,都遇到过和我一样的事情: 在文件夹中直接打…

二极管钳位电路的原理与实际应用

写在前面 本文参考了什么是二极管钳位的作用及原理? - 知乎 针对一些文章讲述错误的地方进行了更正,在讲述不清楚的地方进行了详细的解释,还请各位两篇文章结合而看,效果更佳。 钳位电路说明 1.我们都知道二极管具有单向导电性&a…

【Ajax】笔记-Ajax重复发送请求

问题的产生 用户频繁地点击一个发送请求的按钮,服务器就会频繁地处理请求,而且处理的内容是一样的,这样会导致服务器的压力很大。 这种情况下服务器就没有必要处理每一个请求。 解决方案 发送请求的时候先查看有没有正在请求的相同请求&am…

docker - prometheus+grafana监控与集成到spring boot 服务

一、Prometheus 介绍 1.数据收集器,它以配置的时间间隔定期通过HTTP提取指标数据。 2.一个时间序列数据库,用于存储所有指标数据。 3.一个简单的用户界面,您可以在其中可视化,查询和监视所有指标。二、Grafana 介绍 Grafana 是一…