[ES三周年]深入了解Postgres主键自增
ES 深入 了解 主键 自增 三周年 Postgres
2023-06-13 09:17:26 时间
简介
用最简单的教程,抓住最重要的点。本章教程将带你认识Postgres的自增的用法,以及自增的原理。
本章节中会使用Navicat工具对Postgre的数据库进行操作,如果你能按照教程操作,这将会帮助你加深印象。
初遇自增
顾名思义,就是自动增加,最终产生的结果会生成一组有序的值,也称作序列值。
实际,我们仅仅需要两步操作即可为一个字段添加自增属性,第一步,声明自增变量,第二步引用自增变量。
声明自增变量
首先,我们使用下面的SQL命令创建一个自增变量,语法如下:
--auto 是自定义变量的名称,你可以使用任意名称
CREATE SEQUENCE "public"."auto"
INCREMENT 1 --自增的步长(每一次增加多少)
MINVALUE 1 --属性的最小值
MAXVALUE 9223372036854775807 --属性的最大值
START 1 --初始的值
CACHE 1; --缓存值的数量,缺省值为1,表示每次只产生1个新的值
引用自增变量
其次,将该函数赋值给字段的默认值,这样我们就完成了自增字段的设置
nextval('auto'::regclass)
实例操作
至此为止,自增属性就设置完成了。
深入了解
- 大家经常提到主键自增,但其实自增和主键并没有关系,非主键也可以自增,自增是一种获取默认值的途径之一。
- 还有很多种其他的途径,如:随机值,固定值,特定值等
- 自增变量是数据库中的全局变量,全局唯一,多表共享。
- 全局唯一意味着每个数据库实例只能创建一个名为N的自增变量,重复创建会报错。
- 多表共享,即每个表的每个字段都有权限访问这个自增变量,表和自增变量是一种引用关系,表依引用并且赖自增变量。
- 自增变量不依赖任何表,即使数据库中没有任何表,你依然可以创建,查看,修改或删除自增变量
- 不同表之间引用同一个自增变量,得到的序列值按照表数据的添加顺序分配序序列值
- 同一张表不同字段引用同一个自增变量,得到的序列值按照字段顺序从左到右分配序列值
- 如果一次性插入多条数据,那么就是先从左到右,再从上到下分配序列值
- 不同的数据库之间自增变量不共享,且互不干扰
- 当数据库中仍有字段引用自增变量时,该自增变量无法删除
- 需要将字段默认值设置引用删除,才可以删除自增变量
扩展知识
获取当前自增变量的值
SELECT currval('auto')
设置当前自增变量的值
SELECT setval('"public"."auto"', 1, false);
更新到下个序列值
SELECT nextval('auto');
删除序列值
DROP SEQUENCE "public"."auto";
总结
自增自增是个啥,其实只是个变量哈,这个变量跟库混,而且库里只有它。
你要创建别创建俩,两个一起老打架,删除之前要记得,默认值得清空了。
看着命令还挺多,能用上的也就两三个,全会了,更赚.......
相关文章
- es 其实是不是就是数据库_初识ES数据库「建议收藏」
- ES集群设置密码
- 【腾讯云ES】Elasticsearch 分布式架构剖析及扩展性优化
- es数据库索引_sql 创建索引
- [ES三周年]理解 ES 查询机制
- 【腾讯云ES】Elasticsearch Aggregations数据统计实践
- ES mget、bulk、mappings
- 【ES三周年】ES读取写入原理浅析
- 【ES三周年】高效搜索引擎ElasticSearch介绍
- 【ES三周年】深入理解 ELK 中 Logstash 的底层原理 + 填坑指南
- IOS – OPenGL ES 调节图像曝光度 GPUImageExposureFilter
- IOS – OpenGL ES 调节图像不透明度 GPUImageOpacityFilter
- IOS – OpenGL ES 设置图像锐化 GPUImageSharpenFilter
- 【ES三周年】Elasticsearch Service 实践经验分享
- IOS – OpenGL ES 图像鱼眼移动效果 GPUImageBulgeDistortionFilter
- ES与MySQL:混合技术的优势(es和mysql)
- ES与MySQL的完美同步解决方案(es同步mysql)
- 实现跨越时效的大数据分析ES与Redis的实际应用(真实应用es和redis)
- 使用ES导入Oracle数据库一招制胜(es 导入 Oracle)
- 数据存储看您选择ES还是Redis(数据存es还是redis)
- 使用Redis导入ES实现高效数据迁移(把redis数据导入es)
- 抉择存储数据的最佳选择 ES 还是 Redis(存es还是redis)
- Oracle与ES协同同步实现最佳性能(oracle与es同步)