SQL

SQL - primary key, foreign key

데이터_박과장 2023. 10. 31. 23:04

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