MySQL - 복합 키

안녕하세요, 데이터베이스 열심히 공부하시는 분들에게! 오늘 우리는 MySQL의 복합 키 세계로 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 분이라면 걱정 마세요 - 저는 이 개념을 단계별로 안내해 드릴 것입니다. 수 년 동안 많은 학생들에게 가르쳐온 경험을 바탕으로 말이죠. 그럼, 좋아하는 음료를 한 잔 마시고, 함께 빠져보겠습니다!

MySQL - Composite Key

복합 키는 무엇인가요?

복합 키에 대해 자세히 알기 전에, 먼저 복합 키가 무엇인지 이해해 보겠습니다. 대규모 도서관을 정리하는 것을 상상해 보세요. 한 권의 책을 고유하게 식별하기 위해 책의 제목만으로 충분할 것 같을 수 있습니다. 하지만 두 권의 책이 같은 제목을 가지고 있을 수 있잖아요? 이때 복합 키가 유용하게 쓰입니다!

복합 키는 두 개 이상의 열을 조합하여 테이블의 한 행을 고유하게 식별하는 것입니다. 책의 제목과 저자 이름을 함께 사용하여 정확한 책을 가리키는 것과 같은 개념입니다.

MySQL 복합 키 생성

이제 복합 키가 무엇인지 이해했으므로, MySQL에서 복합 키를 어떻게 생성하는지 배워보겠습니다. 이 개념을 설명하기 위해 간단한 library 테이블 예제를 사용하겠습니다.

단계 1: 복합 키를 포함한 테이블 생성

CREATE TABLE library (
book_title VARCHAR(100),
author_name VARCHAR(50),
publish_year INT,
ISBN VARCHAR(13),
PRIMARY KEY (book_title, author_name)
);

이 예제에서 우리는 library 테이블을 생성하고 있습니다. 복합 키는 book_titleauthor_name을 조합하여 만들어집니다. 이는 같은 제목을 가진 여러 책이나 같은 저자의 여러 책이 있을 수 있지만, 제목과 저자의 조합은 고유해야 한다는 뜻입니다.

단계 2: 데이터 삽입

우리의 도서관에 몇 권의 책을 추가해 보겠습니다:

INSERT INTO library (book_title, author_name, publish_year, ISBN)
VALUES
('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '9780743273565'),
('To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789'),
('1984', 'George Orwell', 1949, '9780451524935'),
('Pride and Prejudice', 'Jane Austen', 1813, '9780141439518');

이제 중복 항목을 삽입해 보겠습니다:

INSERT INTO library (book_title, author_name, publish_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 2000, '1234567890123');

MySQL은 이를 위반하여 오류를 발생시킬 것입니다. 'The Great Gatsby'와 'F. Scott Fitzgerald'의 조합이 이미 테이블에 존재하기 때문입니다.

MySQL 복합 키 제거

occasionally, you might need to remove a composite key. Don't worry; it's not as scary as it sounds! It's like deciding to reorganize your library in a different way.

Here's how you can drop a composite key:

ALTER TABLE library
DROP PRIMARY KEY;

이 명령은 우리의 library 테이블에서 주요 키 제약 조건을 제거합니다. 하지만 조심하세요! 이제 더 이상 행에 고유 식별자가 없어 중복 항목이 발생할 수 있습니다.

클라이언트 프로그램을 사용한 복합 키

이제 MySQL 클라이언트 프로그램을 사용하여 복합 키를 어떻게 처리하는지 보겠습니다. 이 예제에서는 MySQL 명령줄 클라이언트를 사용하지만, 다른 클라이언트 프로그램에도 동일한 개념이 적용됩니다.

  1. 먼저 MySQL 서버에 연결합니다:
mysql -u your_username -p
  1. 데이터베이스를 선택합니다:
USE your_database_name;
  1. 새로운 테이블을 생성하고 복합 키를 설정합니다:
CREATE TABLE students (
student_id INT,
course_id INT,
enrollment_date DATE,
grade FLOAT,
PRIMARY KEY (student_id, course_id)
);

이 예제에서 우리는 students 테이블을 생성하고 각 행은 특정 과목에 등록된 학생을 나타냅니다. 복합 키는 student_idcourse_id를 조합하여 만들어집니다. 이는 한 학생이 같은 과목에 두 번 등록할 수 없음을 의미합니다.

  1. 데이터를 추가해 보겠습니다:
INSERT INTO students (student_id, course_id, enrollment_date, grade)
VALUES
(1, 101, '2023-09-01', 85.5),
(1, 102, '2023-09-01', 92.0),
(2, 101, '2023-09-01', 78.5),
(2, 103, '2023-09-02', 88.0);
  1. 이제 중복 항목을 삽입해 보겠습니다:
INSERT INTO students (student_id, course_id, enrollment_date, grade)
VALUES (1, 101, '2023-09-15', 90.0);

클라이언트 프로그램은 이를 위반하여 오류 메시지를 표시할 것입니다.

결론

축하합니다! 이제 MySQL 복합 키의 세계로 첫 걸음을 뗐습니다. 복합 키는 데이터베이스 세계의 동적인 듀오처럼, 함께 작동하여 데이터를 고유하고 정리된 상태로 유지합니다.

데이터베이스 관리의 여정을 계속하면서, 복합 키가 데이터 무결성을 유지하고 테이블 간 관계를 설정하는 데 매우 유용하게 쓰이는 것을 알게 될 것입니다. 단일 열만으로는 고유한 식별자로 부족할 때 특히 유용합니다.

계속 연습하고, 곧 복합 키를 프로처럼 생성하고 관리할 수 있을 것입니다! 데이터베이스 세계에서도 두 개(또는 그 이상)가 한 개보다 낫다는 것을 기억하세요!

메서드 설명
CREATE TABLE ... PRIMARY KEY (column1, column2) 복합 키를 포함한 테이블 생성
ALTER TABLE ... ADD PRIMARY KEY (column1, column2) 기존 테이블에 복합 키 추가
ALTER TABLE ... DROP PRIMARY KEY 테이블에서 주요 키(복합 키 포함) 제거
INSERT INTO ... VALUES ... 복합 키 제약 조건을 준수하여 데이터 삽입
SELECT ... WHERE column1 = value1 AND column2 = value2 복합 키를 사용하여 데이터 조회

행복하게 코딩하시고, 데이터베이스가 항상 잘 정리되고 효율적이기를 바랍니다!

Credits: Image by storyset