整型
整型比较简单,主要就是三个:
- smallint、int2:2字节
- integer、int、int4:4字节
- bigint、int8:8字节
正常没啥事就integer,如果要存主键,比如雪花算法,那就bigint。空间要节约,根据情况smallint
浮点型
浮点类型就关注2个(其实是一个)
- decimal(n,m):本质就是numeric,PGSQL会帮你转换
- numeric(n,m):PGSQL本质的浮点类型
针对浮点类型的数据,就使用 numeric
序列
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去构建时,会绑定到指定表的指定列上。
如果是单独构建序列,再构建表,使用传统方式实现,序列和表就是相对独立的。
数值的常见操作
针对数值咱们可以实现加减乘除取余这5个操作
还有其他的操作方式
操作符 |
描述 |
示例 |
结果 |
^ |
幂 |
2 ^ 3 |
8 |
|/ |
平方根 |
|/ 36 |
6 |
@ |
绝对值 |
@ -5 |
5 |
& |
与 |
31 & 16 |
16 |
| |
或 |
31|32 |
63 |
<< |
左移 |
1<<1 |
2 |
>> |
右移 |
16>>1 |
8 |
数值操作也提供了一些函数,比如pi(),round(数值,位数),floor(),ceil()