PostgreSQL数据库实现表字段的自增

这篇具有很好参考价值的文章主要介绍了PostgreSQL数据库实现表字段的自增。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用MySQL的时候,创建表结构时可以通过关键字AUTO_INCREMENT来指定主键是否自增。在PostgreSQL数据库中,使用序列来实现字段的自增。

PostgreSQL序列是一种特殊的用于生产整数序列数据库对象。序列通常用于主键列,与mysql的AUTO_INCREMENT 概念类似。

PostgreSQL 提供三种序列伪类型,分别为SMALLSERIAL, SERIAL, BIGSERIAL,对应范围如下:

Name Storage Size Range
SMALLSERIAL 2 bytes 1 to 32,767
SERIAL 4 bytes 1 to 2,147,483,647
BIGSERIAL 8 bytes 1 to 922,337,2036,854,775,807

创建表时使用SERIAL伪类型定义序列:

CREATE TABLE table_name(
    id SERIAL
);

赋值serial伪类型给id列,PostgreSQL将执行下列步骤:

  • 创建序列对象并设置下一个生成值作为列的缺省值。
  • 给对应列增加NOT NULL约束,因为序列总是生成一个整数值,不能为null值。
  • 赋值序列的拥有者给id列,因此当id列或表被删除时,序列对象自动被删除。

对应背后执行语句:

CREATE SEQUENCE table_name_id_seq;
 
CREATE TABLE table_name (
    id integer NOT NULL DEFAULT nextval('table_name_id_seq')
);
 
ALTER SEQUENCE table_name_id_seq
OWNED BY table_name.id;

创建表时设置主键自增

创建表

CREATE TABLE student
(
    id   SERIAL PRIMARY KEY,
    name VARCHAR
);

插入数据

可以忽略对应列或使用default关键字都可以给serial赋值

INSERT INTO student(name) VALUES ('小明');

INSERT INTO student(id, name) VALUES (DEFAULT, '小红');

修改已有表主键为自增

已有表结构

CREATE TABLE student
(
    id   int4 PRIMARY KEY,
    name VARCHAR
);

创建序列

CREATE SEQUENCE student_id_seq START 1;

代码中的1表示此主键从1开始,注意:如果项目中的表已经有数据,那么START 后边的数字一定要比数据库中的主键字段的最大值要大或者相同

修改主键默认值

ALTER TABLE student
    ALTER COLUMN id SET DEFAULT nextval('student_id_seq'::regclass);

也可使用Navicat设计表修改字段默认值
PostgreSQL数据库实现表字段的自增

自增量从 SERIAL 修改为 SERIAL8

1.字段类型调整为 int8

ALTER TABLE student  ALTER COLUMN "id" TYPE int8;

2.创建sequence, 起始值从当前表中选取

CREATE SEQUENCE student_id_seq8 START WITH max_Id;

max_Id 为当前表中最大值,表中无数据可设置为1
查询最大ID值: SELECT MAX("id") FROM student;

3.将表的自增量主键字段 默认值置为null

ALTER TABLE student ALTER COLUMN "id" SET DEFAULT NULL;

4.设置默认值为新的 sequence

ALTER TABLE student ALTER COLUMN "id" SET DEFAULT nextval('student_id_seq8'::regclass)

5.可以删除原来的sequence文章来源地址https://www.toymoban.com/news/detail-443176.html

DROP SEQUENCE student_id_seq;

到了这里,关于PostgreSQL数据库实现表字段的自增的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • PostgreSQL 数据库实现公网远程连接

    PostgreSQL 数据库实现公网远程连接

    PostgreSQL是一个功能非常强大的关系型数据库管理系统(RDBMS),下面简单几步通过cpolar 内网穿透工具即可现实本地postgreSQL 远程访问! 1. 安装postgreSQL 进入官网下载界面,我们下载自己需求的版本,这里选择windows 为例:https://www.postgresql.org/download/ 下载后运行安装文件,进行一步步安

    2024年02月08日
    浏览(6)
  • PostgreSQL--实现数据库备份恢复详细教学

    PostgreSQL--实现数据库备份恢复详细教学

    前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:RodmaChen 数据库备份恢复功能是每个产品所需的,以下是简单的脚本案例,满足了大部分备份和恢复需求 关于备份恢复命令可参考这篇文章:PostgreSQL – 备份恢复命令 一. 数据库备份 我创建了back-sq

    2024年02月15日
    浏览(8)
  • 碎嘴子教学mysql数据库自增

    主要分为两种方式: 1.建表时设置自增 2.建表后设置自增 方式一:建表时设置

    2024年02月05日
    浏览(5)
  • 【数据库】自增ID有什么坏处?什么样的场景下不使用自增ID?

    在MySQL中,数据表的主键一般采用id字段自增的形式。使用自增ID给我们带来不少便捷,但也有不少坏处,在一些场景下是不推荐使用自增ID的。 自增ID是在设计表时将id字段的值设置为自增的形式,这样当插入一行数据时无需指定id会自动根据前一字段的ID值+1进行填充。在My

    2024年02月07日
    浏览(6)
  • Hibernate适配DM数据库主键自增配置

    Hibernate适配DM数据库主键自增配置

    hibernate有多种生成主键策略,例如assigned、increment、hilo、seqhilo、sequence、identity、native、uuid、guid等方法,其中native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用

    2023年04月24日
    浏览(6)
  • 快速实现数据库的转换,如从Mysql切换到Postgresql【含gif】

    快速实现数据库的转换,如从Mysql切换到Postgresql【含gif】

    因为项目的需要,需要将使用的数据库A从Mysql切换到Postgresql并且合并到同一个数据库B中。 使用 Navicat 15的【逆向表到模型】功能,可以快速将Mysql表转为Postgresql表(数据+表结构),而且支持多表的转换。 * 注意到一个小细节: Navicat 15【多表选择】时不能在左侧[导航栏]直接

    2024年02月11日
    浏览(7)
  • Sql Server数据库实现表中字段的列加密研究

    Sql Server数据库实现表中字段的列加密研究

            去年6月份的时候做过一个系统,要对里面的一些敏感字段进行一下加密。Sqlserver列加密可以参考官方文档:SQL Server 技术文档 - SQL Server | Microsoft Learn。主要看下来有三种加密方法:1、利用证书对数据进行加密和解密。2、利用非对称密钥对数据进行加密和解密。3、利

    2024年02月05日
    浏览(14)
  • 生成12位短id,自增且不连续,永不重复,不依赖数据库

    基本思路: 设计模式:单例模式 是否加锁:是 synchronized 获取最后一次生成的时间戳值T0 限定初始时间为2023-08-01 00:00:00,获取当前时间时间戳T1,T1与初始时间的毫秒差值T2,转为16进制,转为字符串为r1,获取该字符串的长度L1 获取L2 (length - L1) ,获取L2位数字的16进制自增数值范围

    2024年02月10日
    浏览(8)
  • 【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询

    在PostgreSQL中,我们可以使用 SELECT DISTINCT 和 SUBSTRING 函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对 resource_version 字段的去重查询。 1. SELECT DISTINCT 语句 SELECT DISTINCT 语句用于从表中选择不重复的记录。如果没有指定列名,则会选择所有列。在本

    2024年02月14日
    浏览(6)
  • 【PostgreSQL 数据库技术峰会(成都站)】云原生虚拟数仓 PieCloudDB Database 的架构和关键模块实现...

    2023年6月17日,中国开源软件推进联盟 PostgreSQL 分会在成都举办了数据库技术峰会。此次峰会以“新机遇、新态势、新发展”为主题,结合当下信创热潮、人工智能等产业变革背景,探讨 PostgreSQL 数据库在这些新机遇下的发展前景。峰会邀请众多行业大咖、学术精英、技术专家

    2024年02月11日
    浏览(4)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包