[SQL] Primary Key, Foreign Key

Estar·2024년 7월 14일
0

TIL

목록 보기
7/17
post-thumbnail

💻Primary Key (기본 키)

✅ 정의

Primary Key (기본 키): 테이블 내에서 각 행을 고유하게 식별하는 열 또는 열의 조합입니다.

✅ 특징

  • 고유성: 기본 키는 각 행을 고유하게 식별할 수 있어야 합니다. 동일한 값이 두 행에 나타날 수 없습니다.
  • NULL 불가: 기본 키 열은 NULL 값을 가질 수 없습니다.
  • 단일성: 각 테이블에는 하나의 기본 키만 존재할 수 있습니다.
  • 인덱싱: 기본 키는 자동으로 인덱스로 설정되어 검색 속도를 높입니다.
  • 불변성: 기본 키 값은 가능한 한 변경되지 않아야 합니다. 이는 행의 고유 식별자가 변경되면 참조 무결성이 깨질 수 있기 때문입니다.

✅ 용도

테이블의 각 행을 고유하게 식별하는 데 사용됩니다.
데이터베이스 내에서 행 간의 관계를 설정할 때 사용됩니다.

CREATE TABLE Customer (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

💻Foreign Key (외래 키)

✅ 정의

Foreign Key (외래 키): 한 테이블의 열이 다른 테이블의 기본 키를 참조하는 키입니다. 이를 통해 테이블 간의 관계를 설정합니다.

✅ 특징

  • 참조: 외래 키는 다른 테이블의 기본 키를 참조합니다.
  • NULL 가능: 외래 키 열은 NULL 값을 가질 수 있습니다.
  • 참조 무결성: 참조된 값은 반드시 존재해야 하며, 참조된 행이 삭제되거나 수정될 때 외래 키 제약 조건을 유지해야 합니다.
  • 다중 참조: 하나의 테이블은 여러 개의 외래 키를 가질 수 있습니다.
  • 데이터 무결성: 외래 키는 데이터 무결성을 보장하며, 참조된 데이터가 변경되거나 삭제될 때 이를 방지하거나 연쇄적으로 수정할 수 있습니다.

✅ 용도

  • 테이블 간의 관계를 설정하고, 데이터의 참조 무결성을 유지하는 데 사용됩니다.
  • 부모-자식 관계와 같은 계층 구조를 설정할 수 있습니다.
order_id INT PRIMARY KEY,
    order_date DATE,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);

Primary Key를 만들고 이를 Foreign Key로 가져오는 것 해보기

Customer 테이블 생성 및 데이터 삽입

CREATE TABLE Customer (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

INSERT INTO Customer (customer_id, name, email) VALUES (1, 'Alice', 'alice@example.com');
INSERT INTO Customer (customer_id, name, email) VALUES (2, 'Bob', 'bob@example.com');
INSERT INTO Customer (customer_id, name, email) VALUES (3, 'Charlie', 'charlie@example.com');
INSERT INTO Customer (customer_id, name, email) VALUES (4, 'David', 'david@example.com');
INSERT INTO Customer (customer_id, name, email) VALUES (5, 'Eve', 'eve@example.com');

예시

Orders 테이블 생성 및 데이터 삽입

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    order_date DATE,
    customer_id INT,
    FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);

INSERT INTO Orders (order_id, order_date, customer_id) VALUES (101, '2023-07-01', 1);
INSERT INTO Orders (order_id, order_date, customer_id) VALUES (102, '2023-07-02', 2);
INSERT INTO Orders (order_id, order_date, customer_id) VALUES (103, '2023-07-03', 3);
INSERT INTO Orders (order_id, order_date, customer_id) VALUES (104, '2023-07-04', 4);
INSERT INTO Orders (order_id, order_date, customer_id) VALUES (105, '2023-07-05', 5);

  • Customer 테이블에는 5개의 행이 삽입되어 있으며, 각 행은 고유한 customer_id를 갖고 있습니다.
  • Orders 테이블에는 각 주문에 대한 정보가 있으며, customer_id를 통해 Customer 테이블과 관계를 맺고 있습니다. 이는 customer_id가 Customer 테이블의 기본 키를 참조하는 외래 키입니다.
profile
개발자를 꿈꿔요

0개의 댓글

관련 채용 정보