본문 바로가기

문돌이 존버/DB 및 SQL 스터디

Postgresql 기본키 auto_increment 및 테이블 수정

반응형

Postgresql에서 PK(primary key)인 아이디에 auto_increment, 즉 자동으로 아이디 값을 추가해주는 특성을 부여해보겠습니다. 먼저 auto_increment가 아닌 기본 설정으로 아이디를 생성해볼께요. 

CREATE TABLE COMPANY (
    "CompanyID" INT PRIMARY KEY
    "CompanyName" VARCHAR(32),
    "Floor" VARCHAR(32)
);
INSERT INTO COMPANY(CompanyName, Floor) VALUES('Finance', '6F');
INSERT INTO COMPANY(CompanyName, Floor) VALUES('Marketing', '3F');
SELECT * FROM COMPANY;

DELETE FROM COMPANY WHERE companyid = 2;
INSERT INTO COMPANY(CompanyName, Floor) VALUES('AI LAB', '10F');
SELECT * FROM COMPANY;

위의 예시에서 보면 기존의 ID=2인 마케팅 부서가 삭제되고, AI LAB 부서가 생성되어도 PK는 2가 됩니다. 즉 auto_increment 특성이 없다면 새로운 데이터(Tuble format)에 현재 남아있는 테이블의 가장 마지막 ID + 1을 부여하는 것이죠. 

아래는 auto_increment 특성을 부여한 버전입니다. Postgresql에서는 SERIAL 이란 타입을 사용하면 auto_increment가 기본으로 설정됩니다. SERIAL이란 auto_increment를 지원하는 시퀀스 타입입니다. 

CREATE TABLE COMPANY (
CompanyID SERIAL PRIMARY KEY,
CompanyName VARCHAR(32),
Floor VARCHAR(32)
);

INSERT INTO COMPANY(CompanyName, Floor) VALUES('Finance', '6F');
INSERT INTO COMPANY(CompanyName, Floor) VALUES('Marketing', '3F');
DELETE FROM COMPANY WHERE companyid = 2;
INSERT INTO COMPANY(CompanyName, Floor) VALUES('AI LAB', '10F');

SELECT * FROM COMPANY;

위와 똑같이 명령어를 입력했음에도 AI LAB 부서의 ID는 3이 되었죠. 테이블에 남아 있는 마지막 ID + 1을 하는 것이 아니라, 이전에 존재했던(현재 시점에선 삭제된) 데이터 PK를 기억하고 그 뒤부터 추가하는 것입니다. 본인이 어떤 프로젝트를 할 때 삭제한 기록을 남겨야 한다면 auto_increment를 사용해야겠죠. 

다음은 이미 만든 테이블을 수정하는 과정입니다. 컬럼을 추가 및 삭제할 수도 있고, 컬럼명과 타입을 변경할 수도 있습니다. 

# 컬럼(필드) 추가
ALTER TABLE COMPANY ADD COLUMN staffnumber INT;
SELECT * FROM COMPANY;

# 컬럼명 및 타입 수정
ALTER TABLE COMPANY RENAME COLUMN staffnumber TO managername;
ALTER TABLE COMPANY ALTER COLUMN managername TYPE VARCHAR(32);

SELECT * FROM COMPANY;

# 특정 컬럼 PK 지정
ALTER TABLE ONLY customercustomerdemo
    ADD CONSTRAINT pk_customercustomerdemo PRIMARY KEY ("CustomerID", "CustomerTypeID");
728x90
반응형