• ADADADADAD

    PostgreSQL --序列与自增id的秘密[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:57:58

    作者:文/会员上传

    简介:

    一、PostgreSQL的自增id serial1.2、serial的本质我们在创建表时,经常需要使用到自增id,往往这么写,create table test (id serial,#使用serial来创建一个自增idname varchar(64

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    一、PostgreSQL的自增id serial1.2、serial的本质

    我们在创建表时,经常需要使用到自增id,往往这么写,

    create table test (id serial,#使用serial来创建一个自增idname varchar(64) not null)通过serial创建自增id,同时会创建属于这个表的自增序列,并将id字段设置为not null

    serial和bigserial类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利,本质上是创建了一个序列发生器,然后把自增字段的默认值设置为这个序列发生器的nextval

    CREATE TABLE tablename (colname SERIAL);等价于CREATE SEQUENCE tablename_colname_seq;CREATE TABLE tablename(colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL);
    1.2、序列的属性
    postgres=# \d+ test5_id_seqSequence "public.test5_id_seq"Column |Type |Value| Storage ---------------+---------+---------------------+--------- sequence_name | name| test5_id_seq| plain last_value| bigint| 1 | plain start_value | bigint| 1 | plain#序列起始值 increment_by| bigint| 1 | plain #每次递增值 max_value | bigint| 9223372036854775807 | plain#最大值 min_value | bigint| 1 | plain #最小值 cache_value | bigint| 1 | plainlog_cnt | bigint| 0 | plainis_cycled | boolean | f | plain #是否循环 is_called | boolean | f | plainOwned by: public.test5.id

    因为自增本质上是取序列发生器的下一个值,所以可以多个表共用一个序列发生器,可以实现多表唯一值,当然,还可以设置序列是否可循环来实现id循环
    例如:

     

    二、序列2.1创建序列
    CREATE SEQUENCE name increment by 1 maxvalue 10 minvalue 1 start 1 cycle
    2.2、序列操作
    下一个值:nextval(regclass)当前值:currval(regclass)设置值:setval(regclass)
    2.3、将序列绑定到表
    create table test_seq (id int not null default nextval('my_seq1'), name varchar(64))
    PostgreSQL --序列与自增id的秘密.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: postgresqlpostgresql