Database

postgreSQL에서 Auto Increment 사용하기

snape 2023. 4. 19. 15:18

프로젝트 진행 중에 table에 Auto Increment가 설정 안 되어 있는 것을 발견했다.

이 때까지 JPA로만 써와서 직접적으로 DB에서 설정할 일이 없었는데, 이번 기회에 새로 알게 된 것이 있었다.

 

각 DB마다 Auto Increment를 설정하는 것이 조금씩 다르다. Sequence를 생성하는 게 별 것 아니지만 귀찮은 일인 것 같아서 DBeaver에서 해당 기능이 없는가 찾아봤는데, 못 찾았다.

 

이번 기회를 통해 JPA가 진짜 편하다는 것을 다시 느꼈다.  

 

MySQL

MySQL에서는 쉽게 설정이 가능하다. 

-- 신규 생성
CREATE TABLE table_name (
  id INT AUTO_INCREMENT PRIMARY KEY,
);

-- 이미 존재
ALTER TABLE table_name MODIFY id INT AUTO_INCREMENT;

 

PostgreSQL

PostgreSQL에서는 Auto Increment를 위해 우선 Sequence를 생성해 주고, 해당 시퀀스를 DEFAULT로 설정해 주어야 한다.

-- 시퀀스 생성
CREATE SEQUENCE sequence_name
  START 1
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 100000
  CACHE 1;

-- 테이블 생성
CREATE TABLE table_name (
  id INT DEFAULT NEXTVAL('sequence_name') PRIMARY KEY,
  ...
);

-- 테이블이 이미 존재할 경우
ALTER TABLE table_name ALTER COLUMN id SET DEFAULT NEXTVAL('sequence_name');

 

Oracle

oracle에서도 psql과 마찬가지로 Sequence를 사용한다.

-- 시퀀스 생성
CREATE SEQUENCE sequence_name
  START WITH 1
  INCREMENT BY 1
  MAXVALUE 100000
  NOCYCLE
  NOCACHE;


-- 테이블 생성
CREATE TABLE table_name (
  id NUMBER DEFAULT sequence_name.NEXTVAL PRIMARY KEY,
  ...
);

-- 이미 테이블이 존재할 경우
ALTER TABLE table_name MODIFY id DEFAULT sequence_name.NEXTVAL;

 

MS SQL

ms sql에서는 Indentity 키워드를 통해 Auto Increment를 설정한다.

CREATE TABLE example (
  id INT IDENTITY(1,1) PRIMARY KEY,
  name VARCHAR(50)
);

 

MongoDB

mongoDB에서는 ObjectId 타입의 자동 생성 필드를 사용하여 구현한다. 이 필드는 BSON(ObjectId) 형태로 저장된다.

db.createCollection("example", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["_id", "name"],
      properties: {
        _id: {
          bsonType: "objectId",
          description: "Auto Incremented Id"
        },
        name: {
          bsonType: "string",
          description: "Name of the example"
        }
      }
    }
  }
})