Navigation

    MemFireDB论坛

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    小技巧,PostgreSQL创建表字段自增的方法1

    MemFireDB新手区
    1
    1
    18
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MemFireDB Robot last edited by MemFireDB Robot

      在 PostgreSQL 中,可以通过将列数据类型定义为 SERIAL 来创建数据库表,用于定义表的某一列为自增列。

      创建自增序列

      CREATE TABLE <table_name> (
          <column_name> SERIAL
      );
      

      创建表

      比如:我们可以在MemFire Cloud中创建一张数据库表

      CREATE TABLE user123(
          id SERIAL PRIMARY KEY,
          name varchar
      )
      

      插入数据

      要在向表中插入一行时将序列生成的值分配给user123 表的 id 列,您可以忽略该列或对该列使用 DEFAULT 关键字,如下所示

      insert into user123(name) values('张三');
      insert into user123(name) values('李三');
      insert into user123(name) values('王三');
      insert into user123(name) values('刘三');
      insert into user123(id,name) values(default,'马三');
      
      

      获取序列的当前值

      使用如下sql可以获取序列当前值:

      SELECT nextval('user123_id_seq');
      
      

      小知识

      当您将 SERIAL 数据类型分配给任何列时,PostgreSQL 将执行以下操作

      • 创建一个序列对象并将序列生成的下一个值作为默认值分配给列,序列的默认名称是<table_name>_<column_name>_seq.
      • 对表的SERIAL 类型列添加NOT NULL 约束,每当数据插入表中时,序列将始终生成一个整数值并将其分配给列,因此列将始终为 NOT NULL。
      • 该列将成为序列的所有者。如果列被删除或表被删除,序列将被自动删除。
      名称 大小 范围
      LLSERIAL 2 字节 1 到 32,767
      SERIAL 4 字节 1 到 2,147,483,647
      BIGSERIAL 8 字节 1 到 9,223,372,036,854,775,807

      ​ 相关的方法如下(regclass 表示序列的名称):

      函 数 返 回 类 型 描 述
      currval( regclass ) bigint 获取指定序列最近一次使用netxval后的数值,如果没有使用nextval而直接使用currval会出错。
      lastval() bigint 返回最近一次用 nextval 获取的任意序列的数值
      nextval( regclass ) bigint 递增序列并返回新值
      setval( regclass,bigint ) bigint 设置序列的当前数值
      setval( regclass,bigint ,boolean ) bigint 设置序列的当前数值以及 is_called 标志,如果为true则立即生效,如果为false,则调用一次nextval后才会生效

      MemFire Cloud 平台表编辑器操作说明

      用户如何在创建了数据表之后,可以调整主键ID为自增,操作如下:
      979fc5d5-139c-427a-9284-b5bea1ef54e5-image.png
      数据类型选择为int4, 默认值为:nextval('posts4_id_seq'::regclass)

      1 Reply Last reply Reply Quote 1
      • First post
        Last post