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);

– 求知若饥,虚心若愚。

相关推荐

  1. pgsql已有表设置自增

    2024-01-19 12:12:02       17 阅读
  2. pgsql 多个模式相同的表获取

    2024-01-19 12:12:02       12 阅读
  3. 【MySQL】和外

    2024-01-19 12:12:02       42 阅读
  4. MYSQL,索引,外

    2024-01-19 12:12:02       33 阅读
  5. SQL的联合

    2024-01-19 12:12:02       38 阅读
  6. 数据库使用回填

    2024-01-19 12:12:02       31 阅读
  7. SQLite表添加

    2024-01-19 12:12:02       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-19 12:12:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-19 12:12:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-19 12:12:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-19 12:12:02       20 阅读

热门阅读

  1. 为什么要设计双亲委派机制

    2024-01-19 12:12:02       34 阅读
  2. element-ui 打包流程源码解析(上)

    2024-01-19 12:12:02       37 阅读
  3. Vue2 Echarts 3D饼图

    2024-01-19 12:12:02       31 阅读
  4. golang学习-channel管道

    2024-01-19 12:12:02       32 阅读
  5. What is `@Controller` does?

    2024-01-19 12:12:02       35 阅读
  6. R语言入门——多变量移除

    2024-01-19 12:12:02       34 阅读