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"
}
}
}
}
})