个人网站建设联系,仿站模板,wordpress改页面,网站开发参考文献期刊[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/131841058上一篇介绍了事务#xff0c;锁#xff0c;子查询
事务有点像是原子操作#xff0c;需要有完整性#xff0c;要么全都完成了#xff…[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询_Edward.W的博客-CSDN博客https://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支持以下的时间和日期类型
时间类型PostgreSQL 支持多种时间类型包括时间戳类型如 timestamptz、timestamp 类型和时间区间类型如 interval 类型。其中timeSTAMPTZ 类型包含时区信息而 timestamp 类型不含时区信息。interval 类型表示时间间隔如分钟、小时、天、月、年等。日期类型PostgreSQL 支持日期类型包括日期类型如 date 类型和日期时间类型如 datetime 类型。日期类型表示日期而日期时间类型表示日期和时间。时间和日期函数PostgreSQL 提供了丰富的时间和日期函数如取当前时间、取当前日期、取当前时间戳、计算时间差等。例如可以使用 now() 函数获取当前时间使用 current_date 函数获取当前日期使用 epoch 函数获取当前时间戳。时间和日期格式化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.58851200 | 2023-07-21 14:05:51.58851200 | 2023-07-21
(1 row)
以下是一些比较常用的函数
now()获取当前时间戳。current_date获取当前日期。current_time获取当前时间。epoch获取当前时间戳以秒为单位。extract()从日期时间值中提取指定的时间单位如年、月、日、小时、分钟等。date_trunc()将日期时间值截断为指定的时间单位如年、月、日、小时、分钟等。date_add()将日期时间值添加或减去指定的时间单位如年、月、日、小时、分钟等。date_diff()计算两个日期时间值之间的时间差以天、周、月、年等为单位。date_format()将日期时间值格式化为指定的格式。date_parser()将字符串解析为日期时间值。time_add()将时间值添加或减去指定的时间单位如小时、分钟等。time_diff()计算两个时间值之间的时间差以小时、分钟等为单位。time_format()将时间值格式化为指定的格式。time_parser()将字符串解析为时间值。interval_add()将时间间隔值添加或减去指定的时间单位如分钟、小时、天等。interval_diff()计算两个时间间隔值之间的时间差以指定的时间单位为单位。interval_format()将时间间隔值格式化为指定的格式。interval_parser()将字符串解析为时间间隔值。