最近使用postgresql数据库做开发,使用到序列,记下来方便自己使用。
序列是基于 bigint 运算的,因此其范围不能超过八字节的整数范围,即字段类型在序列的使用上就会有限制。
方式一:在表中指定字段类型为serial 类型。这种方式会在字段类型为serial上自动创建一个序列和索引,已验证。
ps: 对于指定serial 创建的,删除该表的同时,对应的序列也会被删除
例子:
create table person(
id serial,
name text
);
方式二:先创建序列名称,然后在新建的表中列属性指定序列就可以了。
CREATE SEQUENCE person_seq;
create table person (
id INT4 DEFAULT nextval('person_seq') PRIMARY KEY,
name text
);
1、获取序列的下一个值 select
nextval('person_seq')
ps: oracle 获取序列的下一个值 select
序列名称.nextval from
dual;
2、获取序列当前值 select
currval('person_seq')
3、把所建的person表赋予某个角色 alter table person
owner to 角色
把所建序列赋予某个角色 ALTER SEQUENCE 序列名称
OWNER TO 角色;
4、把所建的序列赋予到表中的某列上 alter sequence person_seq
owend by person.id
二、数据库中某个字段的null值不能与其他值的比较
比如:某个表的flag字段置为null,查询时只能通过is not null 或者是is null,不能写成flag !=1,has_messaged字段值为null,通过
SELECT *FROM 表名 where has_messaged !=1,查询has_messaged不为1的记录是错误的。
三、数据库中某个字段全为数字的字符串,且需要比较大小
1、数据库中某个字段全为数字的字符串,且需要比较大小的话,需要转换成整型来进行比较
如:
cast(要转的字符串 as int) as 别名
2、查询数据库的连接数
select count(*) from pg_stat_activity
四、存储过程
1、使用存储过程往表里插入数据
[color=red]
create or replace function dataInsert(integer) returns integer as
$$
declare
count alias for $1;
begin
while count>0 loop
insert into 表名(?,?,?....,?) values (?,?,?...,?);
count := count-1;
end loop;
return count;
end;
$$
LANGUAGE plpgsql;
select dataInsert(2);
[/color]
五、postgresql修改字段类型
ALTER TABLE表名 ALTER COLUMN 要修改的字段名TYPE 类型USING (trim(要修改的字段名::类型);
如:ALTER TABLE xxxx ALTER COLUMN xx TYPE int USING (trim(xx)::int);
修改表的长度:
alter table 表名 alter column 字段名 type 字段类型(长度值)
alter table xxx alter column xxx type varchar(256);
六、SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有
相同数量的列。列也必须
拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值,即UNION是去了重的。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
sql union all的执行效率要比sql union效率要高很多
在数据库中,union和union all 关键字都是将两个结果集合合并为一个,但这两者从使用和效率上来说都有所不同。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
1、值得注意的是,sql union all的执行效率要比sql union效率要高很多,这是因为,使用sql union需要进行排重,而sql union All 是不需要排重的,这一点非常重要,因为对于一些单纯地使用分表来提高效率的查询,完全可以使用sql union All。
还有,如果使用了union,无论是sql union还是sql union all一定要记住对数据库表加上索引!
2、UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
也就是说,筛选掉重复的记录的过程就是对在表链接后会对所产生的结果集先进行排序运算(order by 表上所有的列),之后根据表的下一行是否与上一行相同来判断下一行是否是重复行而将其删除。
3、union all 与union 排序
方式1:
把结果集作为子查询 select *from () 名 order by
Select * From
(Select AID,AName,ADemo From ATable Union All Select BID,BName,BDemo From BTable) a Order By a.AID
注意:
(1) 所有查询中的列数和列的顺序必须相同。
在使用 UNION 运算符组合的语句中,所有显示列表的数目必须相同(列表内容可以包括:列名、算术表达式、聚合函数等);
(2) 数据类型必须兼容。
在使用 UNION 组合的结果集中的相应列必须具有相同数据类型或者两种数据类型之间存在隐性数据转换,或提供了类型转换。例如,在datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
(3) 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。
补充:
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
分享到:
相关推荐
了解这些基础知识后,你可以根据具体需求编写Java应用程序,实现对PostgreSQL数据库的各种操作。需要注意的是,确保JDBC驱动版本与PostgreSQL数据库服务器的版本兼容,以避免可能出现的兼容性问题。同时,为了保证...
1. **PostgreSQL数据库**:PostgreSQL是一种开源的关系型数据库管理系统(RDBMS),以其强大的功能、高度的可扩展性和遵循ACID(原子性、一致性、隔离性、持久性)的事务处理而闻名。PostgreSQL 10是其的一个重要...
Matlab 与 PostgreSQL ...本文详细介绍了 Matlab 与 PostgreSQL 数据库的连接方法,并对相关知识点进行了详细的解释。通过本文,读者可以快速地掌握 Matlab 与 PostgreSQL 数据库的连接技术,并将其应用于实际项目中。
本文将指导您使用 Bucardo 搭建 PostgreSQL 数据库双主同步,涵盖 Bucardo 的介绍、搭建前准备、安装 Perl 和 PostgreSQL、安装依赖包等方面的知识点。 一、Bucardo 介绍 Bucardo 是针对 PostgreSQL 数据库开发的...
本篇文章将详细探讨“Python-一个PostgreSQL数据库迁移工具”,并介绍与之相关的知识点。 一、PostgreSQL数据库 PostgreSQL是一种开源的对象关系型数据库管理系统(ORDBMS),以其强大功能、稳定性以及高度的可扩展...
标题 "Go-从任何PostgreSQL数据库提供RESTfulAPI" 暗示了我们将探讨如何使用Go编程语言构建一个服务,该服务能够通过RESTful接口暴露PostgreSQL数据库中的数据。Go是一种高效、轻量级的开源语言,常用于构建网络服务...
"Oracle至PostgreSQL数据库迁移方案" Oracle至PostgreSQL数据库迁移方案是使用Ora2PG工具实现的,该工具是一个Perl语言编写的开源工具,用于将Oracle或MySQL数据库迁移到PostgreSQL数据库。下面是该方案的详细知识...
本“PostgreSQL数据库实战培训课程(速成版)”旨在帮助初学者迅速掌握PostgreSQL的核心概念和操作技巧,为你的IT职业生涯添砖加瓦。 课程概述: 在本速成课程中,你将深入学习PostgreSQL的基础知识,包括安装与...
总结来说,C#插件用于MySQL和PostgreSQL数据库驱动主要涉及以下几个知识点: 1. ADO.NET框架及其在C#中的使用 2. MySQL Connector/Net驱动及其在C#中的应用 3. Npgsql驱动及其在C#中的应用 4. 数据库连接字符串的...
本教程将深入讲解PostgreSQL数据库工程师所需的技能,包括主从复制、高可用性(HA)以及集群架构等关键知识点。 1. **主从复制**: 主从复制是数据库高可用性的一种常见实现方式,它允许数据在主数据库(master)...
PostgreSQL 数据库基础知识和基本操作 PostgreSQL 是一个功能强大且灵活的开源关系数据库管理系统。它具有高性能、可靠性和可扩展性等特点,广泛应用于各个行业和领域。下面是 PostgreSQL 数据库基础知识和基本操作...
对于开发者而言,熟悉PostgreSQL的开发接口,如libpq,以及如何在应用程序中集成数据库操作也是必不可少的知识。总之,PostgreSQL 9.2.4-1为Windows x64用户提供了一个强大且稳定的数据库解决方案,适用于各种规模的...
在本示例中,我们将详细讲解如何使用JDBC连接到PostgreSQL数据库,这是一个非常基础且实用的技能,对于任何需要在Java应用程序中处理数据库的开发者来说都是必不可少的。 首先,你需要确保已经在你的系统上安装了...
这个压缩包文件“MetaSploit终端下PostgreSQL数据库的使用.rar”显然是关于如何在MetaSploit环境中操作和利用PostgreSQL数据库的教程。PostgreSQL是一种功能强大的开源关系型数据库管理系统,因其安全性、稳定性和可...
重要知识postgresql数据库pg.pdf
本篇文章将详细介绍如何使用Kettle访问PostgreSQL数据库,处理数据,并将其导出为Excel文件,同时也会提及Docker在搭建环境中的应用。 首先,PostgreSQL是一种开源的关系型数据库管理系统,以其强大的功能和稳定性...
根据提供的标题、描述、标签及部分内容,我们可以提炼出与PostgreSQL数据库优化相关的多个知识点。以下是对这些知识点的详细阐述: ### PostgreSQL数据库优化培训视频概述 PostgreSQL是一款强大的开源对象关系型...
本文档详细介绍了MySQL和PostgreSQL数据库高可用的分析实践,涵盖了高可用原理、MySQL高可用和PostgreSQL高可用等方面的知识点。 一、高可用原理 高可用是指系统在无中断的情况下执行其功能的能力,是进行系统设计...
PostgreSQL数据库性能调优指南 PostgreSQL数据库性能调优是一个复杂且多方面的问题,涉及到数据库架构设计、查询优化、数据库配置、物理资源配置等多个方面。以下是 PostgreSQL 数据库性能调优指南的详细知识点: ...