前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[ES三周年]深入了解Postgres主键自增

[ES三周年]深入了解Postgres主键自增

原创
作者头像
宇宙无敌暴龙战士之心悦大王
修改2023-03-15 14:33:04
1.5K0
修改2023-03-15 14:33:04
举报
文章被收录于专栏:kwai

简介

用最简单的教程,抓住最重要的点。本章教程将带你认识Postgres的自增的用法,以及自增的原理。

本章节中会使用Navicat工具对Postgre的数据库进行操作,如果你能按照教程操作,这将会帮助你加深印象。

初遇自增

顾名思义,就是自动增加,最终产生的结果会生成一组有序的值,也称作序列值。

实际,我们仅仅需要两步操作即可为一个字段添加自增属性,第一步,声明自增变量,第二步引用自增变量。

声明自增变量

首先,我们使用下面的SQL命令创建一个自增变量,语法如下:

代码语言:javascript
复制
--auto 是自定义变量的名称,你可以使用任意名称
CREATE SEQUENCE "public"."auto"
 INCREMENT 1                        --自增的步长(每一次增加多少)
 MINVALUE 1                         --属性的最小值
 MAXVALUE 9223372036854775807       --属性的最大值
 START 1                            --初始的值
 CACHE 1;                           --缓存值的数量,缺省值为1,表示每次只产生1个新的值

引用自增变量

其次,将该函数赋值给字段的默认值,这样我们就完成了自增字段的设置

代码语言:javascript
复制
nextval('auto'::regclass)

实例操作

至此为止,自增属性就设置完成了。

深入了解

  • 大家经常提到主键自增,但其实自增和主键并没有关系,非主键也可以自增,自增是一种获取默认值的途径之一。
    • 还有很多种其他的途径,如:随机值,固定值,特定值等
  • 自增变量是数据库中的全局变量,全局唯一,多表共享。
    • 全局唯一意味着每个数据库实例只能创建一个名为N的自增变量,重复创建会报错。
    • 多表共享,即每个表的每个字段都有权限访问这个自增变量,表和自增变量是一种引用关系,表依引用并且赖自增变量。
    • 自增变量不依赖任何表,即使数据库中没有任何表,你依然可以创建,查看,修改或删除自增变量
  • 不同表之间引用同一个自增变量,得到的序列值按照表数据的添加顺序分配序序列值
  • 同一张表不同字段引用同一个自增变量,得到的序列值按照字段顺序从左到右分配序列值
    • 如果一次性插入多条数据,那么就是先从左到右,再从上到下分配序列值
  • 不同的数据库之间自增变量不共享,且互不干扰
  • 当数据库中仍有字段引用自增变量时,该自增变量无法删除
    • 需要将字段默认值设置引用删除,才可以删除自增变量

扩展知识

获取当前自增变量的值

代码语言:javascript
复制
SELECT currval('auto')

设置当前自增变量的值

代码语言:javascript
复制
SELECT setval('"public"."auto"', 1, false);

更新到下个序列值

代码语言:javascript
复制
SELECT nextval('auto');

删除序列值

代码语言:javascript
复制
DROP SEQUENCE "public"."auto";

总结

自增自增是个啥,其实只是个变量哈,这个变量跟库混,而且库里只有它。

你要创建别创建俩,两个一起老打架,删除之前要记得,默认值得清空了。

看着命令还挺多,能用上的也就两三个,全会了,更赚.......

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 初遇自增
    • 声明自增变量
      • 引用自增变量
        • 实例操作
        • 深入了解
        • 扩展知识
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档