开发者社区> bqospzg5rfs7g> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)|学习笔记

简介: 快速学习3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)
+关注继续查看

开发者学堂课程【PostgreSQL快速入门:3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/16/detail/89


3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(三)

 

内容介绍

、PostgreSQL表操作

、事务操作

、单条SQL插入多行


五、PostgreSQL表操作

1、SQL Syntax-Lexical Structure

执行sql语句时分为几个部分

例子

SELECT * FROM pg_class WHERE relname = 'pg_statistic' LIMIT 1;  is one comment

TOKEN

keyword (SELECT FROM WHERE LIMIT)所有的关键字参考数据库手册

identifier or quoted identifier (pg _class relname,表名,列名,对象名..)常量字符串

默认小写,如需大写需使用双引号强烈建议不要使用大写不要用双引号会引发很多不必要的麻烦

literal or constant ('pg_ _statistic' 1)

special character symbol (*) 特殊字符所有的字段

comment (-- is one-line comment) or (/* */ multi-line comment)两个减号后的字符都做注释多行的注解

operator (=)操作符对应数据类型的某一个函数

比如1=1的数据类型对应的是int4eq的函数字符串对应的是texteq

identifier最大长度受以下限制

define NAMEDATA EN 64 (长度限制截断到63)比如支持128位的表名数字改成129即可

truncate_ identifier(char *ident, int len, bool war​​n​​)

{

if(len >= NAMEDATALEN)

{

len = pg _mbcliplen(ident, len, NAMEDATALEN- 1);

if(warn)

{

Char buf[NAMEDATALEN];字节的意思

memepy(buf, ident, len);

Buf[len]= \0;

ereport(NOTICE,

(errcode(ERRCODE_NAME_ TOO_ LONG),

errmsg("identifier\"%s\" will be truncated to \"%s\"",

ident, buf)));

}

ident[len] = "\0';

}

}

2、改变最大长度限制,需重新gitdb改完重新编译

src/include/pg_ config_ manual.h

/*

* Maximum length for identifiers (e.g. table names, column names,

* function names). Names actually are limited to one less byte than this,

* because the length must include a trailing zero byte.

* Changing this requires an initdb.

*/

#define NAMEDATALEN 64

3、​​implicitly-typed literal or constant​​常量输入比如隐式的常量隐式的转换

(1)string

E'digoa​​\\​​'

$$digoal$$

$tag$digoal​​\​​$tag$

(2)bit string

B'1010101'

(3)number

10 or+10

-23.4

+100.1 or 100.1

10e-1

98e+10 or 98e10

4、explicit-typed literal or constant显式的转换

type 'string'单引号中间是字符

time '​​1​​2:00:00'

'string' ::type

'​​1 ​​hour'::interval

CAST( 'string' AS type )

CAST('​​1​​27.0.0.1' AS inet)​​;做强制转换

5、操作符

+-*/<>=~!@#%^&|'?||

查询

postgres=# select count(*) from pg_ operator;

count

706

也可以使用这种用法,解析器同样支持。操作符如果是自定义的不是放在默认的系统下面可以指定它

SELECT 3 OPERATOR(pg_catalog.+)4;

6、特殊符号

$

string quoted用来把字符串扩起来作为变量的前导符号

positional parameter in function or prepared statement

Prepare  p1 <int> as select*from t where id=$1;

Excute p1<1>;

把p1替换成int,$1表示第一个变量的意思

()

enforce precedence强制的优先级

[]

array selected elements保留特殊字符

separate the elements of a list表示把元素分开

terminate a SQL结束sql语句

slice from array数组下标的分隔符

*

all the fields of a table or composite value所有的表复合类型

.

numeric , separate schema, table, column names.在数字里面表示一个小数点复合类型可以column.复合类型的名字

 

六、事务操作

事务相关的TOKEN

BEGIN; -可指定事务隔离级别,事务读写属性,约束延迟校验属性等

COMMIT;

ROLLBACK;

SAVEPOINT a;

ROLLBACK to a;

二阶事务相关TOKEN,

prepare transaction

rollback prepared回滚掉前面已经结束的rollback prepared的二阶事务

commit prepared提交一个二阶事务

psq|相关的事务模式变量

ON_ ERROR_ ROLLBACK, ON_ ERROR STOP

postgres- # \set ON_ ERROR_ ROLLBACK on

当在prostgre里面执行语句时在事务中遇到一个错误都要回滚还可以继续执行那条错误相当于直接回避掉跟ON_ ERROR_ ROLLBACK有关系如果开启ON_ ERROR ROLLBACK,会在每一句SQL前设置隐形的savepoint,可以继续下面的SQL,而不用全部回滚

语法已经报错还可以往t表加数据还可以提交如果关闭设置成off再往里面插数据会提示不可以插数据必须要回滚否则不能继续下去会一直报错

 

七、单条SQL插入多行

INSERT INTO tbl(c1...cn) values(...),(...),...,(...);

例如

digoal=# drop table user_ info;

DROP TABLE

digoal =# create table user_ info(id int, info text);

CREATE TABLE

digoal=#insert into user_info(id,info) values( 1,'test')(1'test')(1,test')(1,test'),(1,test);

INSERT0 5

digoal # select ctid,cmin,cmax,xmin,xmax,* from user_ info;

ctid I cmin Icmax I xminI xmax id Iinfo --​​ 几个隐含字段的简单解释这种sql的好处Cmin id完全一样就表示值在同一个sql语句上效率高批量提交考虑用这种方式

(0,1)I 14I 14 I21673245410I11 Itest

(0,2)I 14I 14I21673245410I11 Itest

(0,3)I 14I 14 I2167324540I11 Itest

(0,4)I 14I 14I216732454 0I11 Itest

(0,5)I 14I 14I216732454 0I11 Itest

(5 rows)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)|学习笔记
快速学习3 PostgreSQL psql的使用,SQL语法,数据类型,递归SQL用法(四)
0 0
PostgreSQL技术周刊第13期:PSQL新增变量记录SQL语句的执行情况和错误
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
2464 0
PostgreSQL 11 新特性解读 : psql 新增变量记录SQL语句的执行情况和错误
PostgreSQL 11 版本新增加 ERROR、SQLSTATE、ROW_COUNT、LAST_ERROR_MESSAGE、LAST_ERROR_SQLSTATE 五个变量用来记录SQL语句的执行结果状态和错误信息。
2715 0
函数计算 Python 连接 SQL Server
函数计算 Python 连接 SQL Server 自制脑图
0 0
SQL Server 2000 函数使用---CAST 和 CONVERT
日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。
0 0
【Sql Server】进阶之行数据转为列显示
在开发系统维护阶段,经常需要进行各种数据统计,各种报表之类的。 这个时候,行数据转数据显示就发挥作用了。 场景:行数据的某列值想作为字段列显示
0 0
【Sql Server】时间转换和查询时间范围查询不正确的原因
最近在做时间方法封装的时候发现了一个问题! 如果sql语句输出的时间字段转为了字符串输出,那么在使用此字段作为时间范围筛选时发现无效了,没法过滤对应的时间范围内记录
0 0
【Sql Server】基础之统计库龄语句,仅作为语句使用
知识点的综合使用 分组、数据转换、Case when then、max、min、count、sum、left join多表关联等知识点
0 0
【Sql Server】sql语句文件组分区函数分组方案对应分区表的简单步骤
本篇文章中,主要讲讲sql server数据库中通过sql语句方式对组分区函数的使用 在实际项目中,sql server数据库中有分区的概念,因为在一个表存在大量数据的情况下,需要通过分区方式保存数据来提供查询性能
0 0
文章
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
用SQL做数据分析
立即下载
阿里云流计算 Flink SQL 核心功能解密
立即下载
Comparison of Spark SQL with Hive
立即下载