PostgreSQL基础(五):PostgreSQL基本操作和数据类型介绍

举报
Lansonli 发表于 2024/10/27 11:27:33 2024/10/27
【摘要】 ​PostgreSQL基本操作和数据类型介绍一、单引号和双引号在PGSQL中,写SQL语句时,单引号用来标识实际的值。双引号用来标识一个关键字,比如表名,字段名。-- 单引号写具体的值,双引号类似MySQL的``标记,用来填充关键字-- 下面的葡萄牙会报错,因为葡萄牙不是关键字select 1.414,'卡塔尔',"葡萄牙";二、数据类型转换第一种方式:只需要在值的前面,添加上具体的数据类型...

PostgreSQL基本操作和数据类型介绍

一、单引号和双引号

在PGSQL中,写SQL语句时,单引号用来标识实际的值。双引号用来标识一个关键字,比如表名,字段名。

-- 单引号写具体的值,双引号类似MySQL的``标记,用来填充关键字
-- 下面的葡萄牙会报错,因为葡萄牙不是关键字
select 1.414,'卡塔尔',"葡萄牙";

二、数据类型转换

第一种方式:只需要在值的前面,添加上具体的数据类型即可

-- 将字符串转成位图类型
select bit '010101010101001';

第二种方式:也可以在具体值的后面,添加上 ::类型 ,来指定

-- 数据类型
select '2011-11-11'::date;
select '101010101001'::bit(20);
select '13'::int;

 第三种方式:使用CAST函数

-- 类型转换的完整写法
select CAST(varchar '100' as int);


三、布尔类型

布尔类型简单的一批,可以存储三个值,true,false,null

-- 布尔类型的约束没有那么强,true,false大小写随意,他会给你转,同时yes,no这种他也认识,但是需要转换
select true,false,'yes'::boolean,boolean 'no',True,FaLse,NULL::boolean;

boolean类型在做and和or的逻辑操作时,结果

字段A 字段B a and b a or b
true true true true
true false false true
true NULL NULL true
false false false false
false NULL false NULL
NULL NULL NULL NULL


四、数值类型

1、整型

整型比较简单,主要就是三个:

  • smallint、int2:2字节

  • integer、int、int4:4字节

  • bigint、int8:8字节

正常没啥事就integer,如果要存主键,比如雪花算法,那就bigint。空间要节约,根据情况smallint


2、 浮点型

浮点类型就关注2个(其实是一个)

  • decimal(n,m):本质就是numeric,PGSQL会帮你转换

  • numeric(n,m):PGSQL本质的浮点类型

针对浮点类型的数据,就使用 numeric


3、序列

MySQL中的主键自增,是基于auto_increment去实现。MySQL里没有序列的对象。

PGSQL和Oracle十分相似,支持序列:sequence。

PGSQL可没有auto_increment。

序列的正常构建方式:

create sequence laozheng.table_id_seq;
-- 查询下一个值
select nextval('laozheng.table_id_seq');
-- 查询当前值
select currval('laozheng.table_id_seq');

默认情况下,seqeunce的起始值是0,每次nextval递增1,最大值9223372036854775807

告诉缓存,插入的数据比较多,可以指定告诉缓存,一次性计算出20个后续的值,nextval时,就不可以不去计算,直接去高速缓存拿值,效率会有一内内的提升。

序列大多数的应用,是用作表的主键自增效果。

-- 表自增
create table laozheng.xxx(
    id int8 default nextval('laozheng.table_id_seq'),
    name varchar(16)
);
insert into laozheng.xxx (name) values ('xxx');
select * from laozheng.xxx;

上面这种写法没有问题,但是很不爽~很麻烦。

PGSQL提供了序列的数据类型,可以在声明表结构时,直接指定序列的类型即可。

bigserial相当于给bigint类型设置了序列实现自增。

  • smallserial

  • serial

  • bigserial

-- 表自增(爽)
create table laozheng.yyy(
    id bigserial,   
    name varchar(16)
);
insert into laozheng.yyy (name) values ('yyy');

在drop表之后,序列不会被删除,但是序列会变为不可用的状态。 因为序列在使用serial去构建时,会绑定到指定表的指定列上。

如果是单独构建序列,再构建表,使用传统方式实现,序列和表就是相对独立的。


4、数值的常见操作

针对数值咱们可以实现加减乘除取余这5个操作

还有其他的操作方式

操作符 描述 示例 结果
^ 2 ^ 3 8
|/ 平方根 |/ 36 6
@ 绝对值 @ -5 5
& 31 & 16 16
| 31|32 63
<< 左移 1<<1 2
>> 右移 16>>1 8

数值操作也提供了一些函数,比如pi(),round(数值,位数),floor(),ceil()

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。