MySQL에서의 Primary Key와 Foreign Key
Primary Key (기본 키)
정의: 테이블 내의 각 행을 고유하게 식별하는 데 사용되는 하나 또는 여러 개의 컬럼(열)의 집합입니다.
특징:
- 테이블당 하나만 존재할 수 있습니다.
- 중복된 값을 가질 수 없으며 NULL 값을 허용하지 않습니다.
- 보통 ID나 번호로 사용되며, 자동으로 증가하는 값을 설정할 수 있습니다 (AUTO_INCREMENT).
Foreign Key (외래 키)
정의: 다른 테이블의 기본 키를 참조하는 컬럼(또는 컬럼 집합)입니다.
목적: 두 테이블 간의 관계를 설정하고 데이터 무결성을 유지하는 데 사용됩니다.
특징:
- 참조하는 테이블의 기본 키에 존재하지 않는 값을 가질 수 없습니다.
- NULL 값이 허용될 수 있으며, 하나의 테이블에 여러 외래 키가 존재할 수 있습니다.
예시 SQL 코드
테이블 생성 예시:
사용자(User) 테이블: 사용자 ID가 기본 키입니다.
주문(Order) 테이블: 각 주문은 주문 ID를 기본 키로 갖고, 사용자 ID를 외래 키로 사용하여 사용자 테이블을 참조합니다.
-- 사용자 테이블 생성
CREATE TABLE Users (
UserID INT AUTO_INCREMENT,
UserName VARCHAR(100),
UserEmail VARCHAR(100),
PRIMARY KEY (UserID)
);
-- 주문 테이블 생성
CREATE TABLE Orders (
OrderID INT AUTO_INCREMENT,
OrderDate DATE,
UserID INT,
Amount DECIMAL(10, 2),
PRIMARY KEY (OrderID),
FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
이 예시에서, Users 테이블은 각 사용자에 대한 고유한 UserID를 기본 키로 가지고 있습니다. Orders 테이블은 자체적인 기본 키인 OrderID를 가지며, Users 테이블의 UserID를 외래 키로 사용하여 사용자 정보를 참조합니다.
이 구조는 데이터의 무결성을 유지하는 데 도움을 주며, 예를 들어, Orders 테이블에 존재하지 않는 UserID로 주문을 추가하려고 하면, 데이터베이스 시스템이 오류를 반환할 것입니다.
위에서 생성한 Users 및 Orders 테이블에 가상의 데이터를 추가하는 예시를 드리겠습니다. 이 데이터를 통해 기본 키(Primary Key)와 외래 키(Foreign Key)의 작동 방식을 보여드릴 수 있습니다.
가상 데이터 추가
Users 테이블에 데이터 추가
-- Users 테이블에 사용자 추가
INSERT INTO Users (UserName, UserEmail) VALUES
('김철수', 'chulsoo@example.com'),
('이영희', 'younghi@example.com'),
('박지민', 'jimin@example.com');
이 코드는 Users 테이블에 세 명의 사용자를 추가합니다. UserID는 AUTO_INCREMENT로 설정되어 있기 때문에, MySQL이 자동으로 고유한 값을 할당합니다.
Orders 테이블에 데이터 추가
-- Orders 테이블에 주문 추가
INSERT INTO Orders (OrderDate, UserID, Amount) VALUES
('2023-10-01', 1, 15000.00),
('2023-10-02', 1, 20000.00),
('2023-10-03', 2, 5000.00),
('2023-10-04', 3, 8000.00);
이 코드는 Orders 테이블에 주문을 추가합니다. 여기서 UserID는 Users 테이블의 UserID를 참조합니다. 예를 들어, 첫 번째 라인의 UserID 값이 1이므로, 이 주문은 Users 테이블의 UserID가 1인 사용자(김철수)에 속합니다.
데이터 추가 시 주의사항
외래 키 제약 조건: Orders 테이블에 데이터를 추가할 때, UserID는 반드시 Users 테이블에 존재하는 UserID 값을 가져야 합니다. 만약 Users 테이블에 없는 UserID를 가진 주문을 추가하려고 하면, 데이터베이스 시스템은 오류를 반환합니다.
삭제 및 업데이트 제약: Users 테이블에서 사용자를 삭제하거나 UserID를 변경할 경우, 이와 연관된 Orders 테이블의 데이터에도 영향을 미칠 수 있습니다. 이를 관리하기 위한 다양한 전략(CASCADE, SET NULL 등)이 존재합니다.
이러한 예시 코드들은 MySQL의 기본 키와 외래 키 기능을 실제로 어떻게 사용하는지를 보여줍니다. 데이터베이스 설계에서 이러한 키들을 사용하는 것은 데이터 무결성을 유지하고, 관련된 데이터들 간의 관계를 명확히 하는 데 중요한 역할을 합니다.
'SQL' 카테고리의 다른 글
SQL - 테이블과 뷰 (0) | 2023.11.01 |
---|---|
SQL - 고급문법 (0) | 2023.10.28 |
SQL - 문법 기본 (0) | 2023.10.28 |
SQL - 데이터베이스 구축 (0) | 2023.10.28 |
SQL - 데이터 적재 및 사용(주민등록 인구통계) (0) | 2023.10.28 |