PostgreSQL - 자동 증가
안녕하세요, 데이터베이스 열정가 여러분! 오늘은 PostgreSQL의 가장 유용한 기능之一的 AUTO INCREMENT 기능에 대해 다룰 것입니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 주제를 안내해 드리는 것을 기쁘게 생각합니다. 프로그래밍에 전혀 익숙하지 않으신 분들도 괜찮습니다. 커피 한 잔을 들고, 이 학습 여정에 함께 동참해 주세요!
AUTO INCREMENT는 무엇인가요?
자세한 내용으로 들어가기 전에 AUTO INCREMENT가 정확히 무엇인지 이해해 보겠습니다. 큰 파티를 준비하고 각 손님에게 고유한 번호를 부여해야 한다고 상상해 보세요. 수동으로 번호를 할당하는 대신, 마법의 카운터가 새로운 손님마다 자동으로 증가하지 않았을까요? 그게 AUTO INCREMENT의 기본적인 역할입니다!
PostgreSQL에서 AUTO INCREMENT는 테이블에 새로운 행이 추가될 때 자동으로 고유한 번호를 생성하는 기능입니다. 고객 ID나 주문 번호와 같은 각 레코드에 고유한 식별자가 필요할 때 특히 유용합니다.
문법
이제 PostgreSQL에서 AUTO INCREMENT를 어떻게 사용할 수 있는지 살펴보겠습니다. 문법은 매우 간단하지만, 처음에는 조금 두려울 수 있습니다. 단계별로 설명해 드리겠습니다.
CREATE TABLE table_name (
column_name SERIAL PRIMARY KEY,
other_column1 data_type,
other_column2 data_type,
...
);
이 문법을 해부해 보겠습니다:
-
CREATE TABLE table_name
: 이 부분은 지정한 이름의 새로운 테이블을 생성합니다. -
column_name SERIAL PRIMARY KEY
: 여기서 마법이 일어납니다!
-
column_name
은 자동 증가하는 열에 부여하고 싶은 이름입니다. -
SERIAL
은 자동 증가하는 정수 열을 생성하는 PostgreSQL 특정 데이터 유형입니다. -
PRIMARY KEY
는 이 열이 고유한 값을 포함하고 각 행을 식별할 수 있도록 합니다.
- 나머지 줄은 테이블의 다른 열을 정의합니다.
예제
현실 세계의 예제로 이를 적용해 보겠습니다. 우리는 작은 도서관의 데이터베이스를 만들고자 합니다. 책을 추적하고, 각 책에 고유한 ID가 있어야 합니다.
CREATE TABLE books (
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
publication_year INTEGER
);
이 예제에서:
-
book_id
는 우리의 자동 증가 열입니다. 이 열은 새로운 책이 추가될 때마다 고유한 번호를 자동으로 할당합니다. -
title
과author
는 책의 제목과 저자 이름을 저장할 VARCHAR 열입니다. -
publication_year
는 책이 출판된 연도를 저장할 INTEGER 열입니다.
이제 테이블에 책을 추가해 보겠습니다:
INSERT INTO books (title, author, publication_year)
VALUES ('To Kill a Mockingbird', 'Harper Lee', 1960);
INSERT INTO books (title, author, publication_year)
VALUES ('1984', 'George Orwell', 1949);
INSERT INTO books (title, author, publication_year)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925);
book_id
의 값을 지정하지 않았지만, PostgreSQL이 이 값을 자동으로 생성합니다. 테이블을 조회하면:
SELECT * FROM books;
다음과 같은 결과를 볼 수 있습니다:
book_id | title | author | publication_year |
---|---|---|---|
1 | To Kill a Mockingbird | Harper Lee | 1960 |
2 | 1984 | George Orwell | 1949 |
3 | The Great Gatsby | F. Scott Fitzgerald | 1925 |
PostgreSQL이 각 행에 고유한 book_id
값을 자동으로 부여했음을 확인할 수 있습니다.
배후의 원리
이제 PostgreSQL이 다음 번호를 어떻게 알지 궁금할 수 있습니다. 훌륭한 질문입니다! 배후에서 PostgreSQL은 시퀀스를 사용하여 다음 사용 가능한 번호를 추적합니다.
SERIAL
데이터 유형을 사용하면 PostgreSQL이 해당 열에 대해 자동으로 시퀀스를 생성합니다. 시퀀스는 마지막에 제공한 번호를 기억하고, 다음 번호를 요청할 때 다음 번호를 제공합니다.
시퀀스를 직접 확인할 수 있습니다:
\d books
이 명령어는 다음과 같은 결과를 보여줍니다:
Table "public.books"
Column | Type | Collation | Nullable | Default
-----------------+------------------------+-----------+----------+------------------------------
book_id | integer | | not null | nextval('books_book_id_seq'::regclass)
title | character varying(100) | | not null |
author | character varying(100) | | not null |
publication_year| integer | | |
Indexes:
"books_pkey" PRIMARY KEY, btree (book_id)
nextval('books_book_id_seq'::regclass)
부분을 보면, PostgreSQL이 시퀀스를 사용하여 book_id
의 다음 값을 가져오고 있음을 알 수 있습니다.
주의 사항
AUTO INCREMENT는 매우 유용하지만, 연속된 번호 없이 간격이 생길 수 있음을 기억해야 합니다. 행을 추가하고 그 후에 지우면, 그 번호는 다시 사용되지 않습니다. 이는 데이터 일관성을 위해 좋은 일이지만, 이 점을 염두에 두는 것이 중요합니다.
예를 들어, 두 번째 책을 지운 후 새로운 책을 추가하면:
DELETE FROM books WHERE book_id = 2;
그리고 새로운 책을 추가하면:
INSERT INTO books (title, author, publication_year)
VALUES ('Pride and Prejudice', 'Jane Austen', 1813);
테이블은 다음과 같이 보일 수 있습니다:
book_id | title | author | publication_year |
---|---|---|---|
1 | To Kill a Mockingbird | Harper Lee | 1960 |
3 | The Great Gatsby | F. Scott Fitzgerald | 1925 |
4 | Pride and Prejudice | Jane Austen | 1813 |
book_id
2는 누락되고, 새로운 책은 book_id
4를 받습니다.
결론
이제 AUTO INCREMENT에 대해 배웠습니다, 여러분! 우리는 AUTO INCREMENT가 무엇인지, 어떻게 사용하는지, 그리고 그 작동 원리를 살펴보았습니다. AUTO INCREMENT는 새로운 책이 도착할 때 자동으로 고유한 번호를 할당하는 유용한 도서관 사서와 같습니다. 이제 AUTO INCREMENT를 사용하면 고유한 식별자를 할당하는 데 더 이상 어려움을 겪지 않을 것입니다.
데이터베이스 세계에서의 여정을 계속하면서 AUTO INCREMENT를 신뢰할 수 있는 동반자로 삼아, 더 이상 번거로움 없이 고유한 식별자를 할당할 수 있을 것입니다. 연습을 계속하고, 호기심을 유지하면, 언제든지 PostgreSQL 마법사가 될 수 있습니다!
행복하게 코딩하시고, 여러분의 쿼리가 항상 기대하는 결과를 반환하길 바랍니다!
Credits: Image by storyset