【问题标题】:SERIAL datatype in PostgresPostgres 中的 SERIAL 数据类型
【发布时间】:2015-11-28 07:31:18
【问题描述】:

SERIAL数据类型的使用是自动递增值,所以在插入值时不需要指定值。如果我们创建一个 表并将值插入该表,默认情况下,SERIAL 列数据类型的值从 1 开始。但是有没有办法从 100 开始值并以 10 作为默认值而不是 1?

【问题讨论】:

    标签: sql postgresql ddl


    【解决方案1】:

    你可以alter你现有的序列(不管是序列号还是什么)如下

    ALTER SEQUENCE mytbl_id_seq INCREMENT 10 RESTART with 100
    

    创建表时

    create table mytbl (id serial,val int)
    

    一个序列会自动创建即

     CREATE SEQUENCE mytbl_id_seq
      INCREMENT 1
      START 1
    

    所以你可以用你想要的值来改变它,即

      ALTER SEQUENCE mytbl_id_seq 
        INCREMENT 10 
        RESTART with 100
    

    sqlfiddle-demo

    【讨论】:

      【解决方案2】:

      Serial 只是在int 列之上的语法糖化,该列从序列中获取其值。虽然您无法直接控制 serial 列的定义,但您可以改用显式序列定义:

      CREATE SEQUENCE tablename_colname_seq INCREMENT BY 10 START WITH 100; -- Here!
      CREATE TABLE tablename (
          colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
      );
      ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
      

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 2021-01-23
        • 1970-01-01
        • 2015-07-17
        • 2017-11-09
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多