pgsql序列的使用

大家都知道pgsql和mysql不同,mysql字段有有自增属性,pgsql并没有,但是pgsql和oracle一样有序列,很多人刚接触pgsql的时候,并不知道序列是什么,怎么用,下面这篇文章就介绍序列,并且怎么使用序列。

介绍

在 pg数据库中,序列是数据库的一种对象,就好比视图,触发器一样,是用于生成唯一标识符(如自增主键)的对象,我们在pgsql中就可以用序列来实现逐渐自增长。

在navicat中,序列在菜单栏其他的位置打开
在这里插入图片描述

基本操作

创建序列,这里创建一个序列名为seq_student_message,我们创建学生信息表的序列

CREATE SEQUENCE seq_student_message
START WITH 1 – 序列从1开始
INCREMENT BY 1 – 序列执行1次自增1
MINVALUE 1 – 序列最小值是1
MAXVALUE 1000; – 序列最大值是1000
在这里插入图片描述

获取序列值,执行我们刚才创建的序列
SELECT NEXTVAL(‘seq_student_message’);
在这里插入图片描述

手动设置序列的值
SELECT SETVAL(‘seq_student_message’, 100);
在这里插入图片描述

mybatis写法,为了避免主键和业务的强链接,会用序列来当作表的物理主键来使用,一般会这么写

<selectKey keyProperty="studentMessageId" resultType="java.lang.Long" order="BEFORE">
            SELECT NEXTVAL('SEQ_STUDENT_MESSAGE')
</selectKey>

在执行新增方法时,会先获取序列的下一个值,然后将获取到的值传给我们表的物理id当作值来使用,这样就实现了主键自增,而且序列是单独于数据库表的,可以单独操作序列值,非常方便

在实际工作中,可能会还有遇到序列冲突的问题,比如,我手动加了一条数据在表中,序列我随便写的1234,在实际业务中做新增操作,正好序列自增到1233,在获取下一个序列是应该是1234,但是1234已存在,这时候pg就会报错,序列值已存在
在这里插入图片描述

这时候我们只需要设置序列值为当前最大值加一即可。就不会冲突了
SELECT SETVAL(‘seq_student_message’, max_value + 1);

最后就是如何删除序列
DROP SEQUENCE IF EXISTS ‘seq_student_message’;
删除操作谨慎使用

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值