当前位置: 首页 > news >正文

PGSQL主键序列

PostgreSQL和 MySQL数据库还是有一定的区别。

下面了解一下 PGSQL的主键序列。

一、主键

1、系统自带主键序列

在 PostgreSQL 中,GENERATED BY DEFAULT GENERATED ALWAYS 是用于定义自动生成的列(Generated Column)的选项。一般可作用在主键上。

  • GENERATED ALWAYS: 表示该列是自动生成的,并且始终使用自动生成的自增值。如果你提供了一个值(不管这个值是否存在与表中),插入都会报错。
  • GENERATED BY DEFAULT: 表示该列是自动生成的,可以使用你提供的值,如果你没有提供值,则会生成一个默认值。需要注意:使用它创建表做主键时,手动插入显示指定了ID值(不管是否从1开始),后面继续接着 不显示指定id值,系统总是从 1开始。会出现前面创建的id值已存在的重复。

实操总结:

  • 一般情况,我们指定主键ID为 GENERATED ALWAYS类型。
  • 不管你使用 GENERATED ALWAYS还是 GENERATED BY DEFAULT类型,或者两者类型来回切换,只要你显示插入ID值时,PostgreSQL的自动生成ID都不会更新(除非你手动修改序列值)。所以,插入SQL不要显示指定ID值。

2、序列值

2.1 查看序列的当前值

在 PostgreSQL 中,如果你使用 GENERATED BY DEFAULT 或 GENERATED ALWAYS 选项来定义一个自动生成的 ID 字段,而且没有显式地指定序列的名称,PostgreSQL 将会自动为该列生成一个名为 <table_name>_<column_name>_seq 的默认序列名称,其中:

  • <table_name> 是表的名称,
  • <column_name> 是自动生成 ID 的列名。

使用下面 SQL 查询语句来查看序列的当前值:

SELECT last_value FROM your_table_name_your_column_name_seq;-- 比如:查看用户表id序列值
SELECT last_value FROM user_id_seq;

也可以通过 Navicat的工具栏中的其他查看所有序列:

在这里插入图片描述

2.2 修改序列值

要修改当前序列的值,可以使用 PostgreSQL 中的 SETVAL 函数

SELECT setval('your_sequence_name', new_value);-- 比如:user_id_seq序列值改为15,下次插入时,id=16
SELECT setval('user_id_seq', 15);

– 求知若饥,虚心若愚。

相关文章:

  • Hypervisor 和Docker 还有Qemu有什么区别与联系?
  • 鸿蒙开发案列一
  • 基本的 Socket 模型
  • 反序列化字符串逃逸(上篇)
  • 【.NET Core】深入理解异步编程模型(APM)
  • python基础 - 变量
  • 78.网游逆向分析与插件开发-背包的获取-背包类的C++还原与获取物品名称
  • Python基础之文件操作(I/O)
  • html 3D 倒计时爆炸特效
  • mac os电脑用n切换node版本
  • 【ARM 嵌入式 C 入门及渐进7 -- C代码中的可变参数宏详细介绍】
  • 【0247】PG内核checkpoint实现机制分析(2)
  • QT发送request请求
  • Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)
  • html火焰文字特效
  • 【EOS】Cleos基础
  • C++入门教程(10):for 语句
  • CAP理论的例子讲解
  • Git的一些常用操作
  • IndexedDB
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Mysql优化
  • Redis字符串类型内部编码剖析
  • vue-router 实现分析
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从重复到重用
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 聊聊hikari连接池的leakDetectionThreshold
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 试着探索高并发下的系统架构面貌
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 用Python写一份独特的元宵节祝福
  • 2017年360最后一道编程题
  • Linux权限管理(week1_day5)--技术流ken
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​渐进式Web应用PWA的未来
  • #Lua:Lua调用C++生成的DLL库
  • #stm32整理(一)flash读写
  • (arch)linux 转换文件编码格式
  • (LeetCode 49)Anagrams
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Mysql的优化设置
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net 获取url的方法
  • .net开发时的诡异问题,button的onclick事件无效
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @hook扩展分析