pgsql序列的使用

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

介绍

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

在navicat中,序列在菜单栏其他的位置打开
pgsql序列的使用_第1张图片

基本操作

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

CREATE SEQUENCE seq_student_message
START WITH 1 – 序列从1开始
INCREMENT BY 1 – 序列执行1次自增1
MINVALUE 1 – 序列最小值是1
MAXVALUE 1000; – 序列最大值是1000
pgsql序列的使用_第2张图片

获取序列值,执行我们刚才创建的序列
SELECT NEXTVAL(‘seq_student_message’);
pgsql序列的使用_第3张图片

手动设置序列的值
SELECT SETVAL(‘seq_student_message’, 100);
pgsql序列的使用_第4张图片

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


            SELECT NEXTVAL('SEQ_STUDENT_MESSAGE')

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

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

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

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

你可能感兴趣的:(MySQL,mybatis,java,开发语言)