Auto increment table column

后端 未结 4 1577
梦毁少年i
梦毁少年i 2020-11-22 02:35

Using Postgres, I\'m trying to use AUTO_INCREMENT to number my primary key automatically in SQL. However, it gives me an error.

CREATE TABLE Sta         


        
相关标签:
4条回答
  • 2020-11-22 03:19

    In the SQL server database you can use Identity(1,1) like this:

    CREATE TABLE Staff
    (
        ID INT IDENTITY(1,1) NOT NULL,
        Name VARCHAR(40) NOT NULL,
        PRIMARY KEY (ID)
    );
    
    0 讨论(0)
  • 2020-11-22 03:25

    You do not specify which RDBMS you are using, however, in SQL Server you can use this syntax:

    CREATE TABLE [dbo].[Staff]
    (
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] VARCHAR(40) NOT NULL,
    CONSTRAINT [ID] PRIMARY KEY CLUSTERED 
    (
    [ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    
    0 讨论(0)
  • 2020-11-22 03:29

    Postgres 10 or later

    serial columns (see below) remain unchanged. But consider an IDENTITY column. Postgres 10 implements this standard-SQL feature.

    Basic syntax and info in the manual for CREATE TABLE.
    Detailed explanation in this blog entry of its primary author Peter Eisentraut.

    Create table with IDENTITY column

    CREATE TABLE staff (
       staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
     , staff    text NOT NULL
    );

    Add IDENTITY column to existing table

    Table may or may not be populated with rows.

    ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY;
    

    To also make it the PK at the same time (table can't have a PK yet):

    ALTER TABLE staff ADD COLUMN staff_id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY;
    

    Related:

    • How to add a PostgreSQL 10 identity column to an existing table with rows?

    Replace serial with IDENTITY column

    See:

    • How to change a table ID from serial to identity?

    Postgres 9.6 or older

    (Or any version, really.)
    Use the serial pseudo data type instead:

    CREATE TABLE staff (
       staff_id serial PRIMARY KEY,
     , staff    text NOT NULL
    );

    It creates and attaches the sequence object automatically and sets the DEFAULT to nextval() from the sequence. It does all you need.

    I used lower case identifiers in my example. Makes your life with Postgres easier.

    0 讨论(0)
  • 2020-11-22 03:32

    PostgreSQL: If you absolutely must have your own auto increment value:

    Then use a sequence:

    ericlesc_schools=> drop table yar;
    DROP TABLE
    ericlesc_schools=> drop sequence user_id_seq;
    DROP SEQUENCE
    ericlesc_schools=> create sequence user_id_seq;
    CREATE SEQUENCE
    ericlesc_schools=> create table yar(
                       id int default nextval('user_id_seq'), 
                       foobar varchar);
    CREATE TABLE
    ericlesc_schools=> insert into yar (foobar) values('hey alex');
    INSERT 0 1
    ericlesc_schools=> insert into yar (foobar) values('hey what derick');
    INSERT 0 1
    ericlesc_schools=> insert into yar (foobar) values('I look like a hushpuppy');
    INSERT 0 1
    
    ericlesc_schools=> select * from yar;
     id |     foobar      
    ----+-----------------
      1 | hey alex
      2 | hey what derick
      3 | I look like a hushpuppy
    (3 rows)
    
    0 讨论(0)
提交回复
热议问题