복붙노트

[SQL] 자동 증분 테이블 열

SQL

자동 증분 테이블 열

사용 포스트 그레스, 내가 SQL에 자동으로 번호를 내 기본 키를 AUTO_INCREMENT를 사용하는 것을 시도하고있다. 그러나, 그것은 나에게 오류를 제공합니다.

CREATE TABLE Staff   (
  ID        INTEGER NOT NULL AUTO_INCREMENT,
  Name      VARCHAR(40) NOT NULL,
  PRIMARY KEY (ID)
);

오류:

어떤 생각을 왜?

해결법

  1. ==============================

    1.직렬 열 (아래 참조) 변하지. 그러나 IDENTITY 열을 고려하십시오. 포스트 그레스 (10) 구현이 표준 SQL 기능.

    직렬 열 (아래 참조) 변하지. 그러나 IDENTITY 열을 고려하십시오. 포스트 그레스 (10) 구현이 표준 SQL 기능.

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

    기본 구문과 테이블 만들기에 대한 설명서 정보. 의 주 저자 인 피터 Eisentraut의 블로그 항목에 대한 자세한 설명.

    기존 테이블 (행으로 채워 여부)에 IDENTITY 열을 추가하려면 :

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

    또한 (테이블이 아직 PK를 할 수 없습니다) 같은 시간에 그에게 PK를 만들려면 :

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

    같은 오류 메시지가 발생할 수있는 초기 버전의 버그가 있었다 :

    이것은 포스트 그레스 10.2로 수정되었습니다. 세부:

    대신 시리얼 의사 데이터 형식을 사용합니다 :

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

    이것은 자동으로 생성 및 시퀀스 객체를 부착하고 시퀀스에서 NEXTVAL에 DEFAULT ()을 설정한다. 그것은 당신이 필요로하는 모든 않습니다.

    나는 또한 내 예에 불과 소문자 식별자를 사용합니다. 쉽게 포스트 그레스와 함께 당신의 인생을 만듭니다.

    그리고 더 나은 설명 열 이름을 사용합니다. 이름으로 "ID"는 일부 미들웨어가 사용하는 안티 패턴,하지만 거의 설명이다. "이름"과 유사.

  2. ==============================

    2.당신은 당신이이 구문을 사용하여 SQL 서버에, 그러나, 사용하는 RDBMS를 지정하지 않습니다

    당신은 당신이이 구문을 사용하여 SQL 서버에, 그러나, 사용하는 RDBMS를 지정하지 않습니다

    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
    
  3. ==============================

    3.SQL 서버 데이터베이스에서이 같은 (1,1) 신원을 사용할 수 있습니다 :

    SQL 서버 데이터베이스에서이 같은 (1,1) 신원을 사용할 수 있습니다 :

    CREATE TABLE Staff
    (
        ID INT IDENTITY(1,1) NOT NULL,
        Name VARCHAR(40) NOT NULL,
        PRIMARY KEY (ID)
    );
    
  4. ==============================

    4.PostgreSQL의 : 당신이 절대적으로 자신의 자동 증가 값이해야하는 경우 :

    PostgreSQL의 : 당신이 절대적으로 자신의 자동 증가 값이해야하는 경우 :

    그런 다음 시퀀스를 사용합니다 :

    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)
    
  5. from https://stackoverflow.com/questions/9875223/auto-increment-table-column by cc-by-sa and MIT license