새소식

SQL

SQL | MySQL | 기본키, 고유키, 외래키

  • -

 

 

 

1. 기본키 (Primary Key)

 

 

✅ Primary Key, 기본키란?

        : SQL 데이터베이스에서 특정 레코드를 유일하게 식별하기 위해 사용되는 필드 또는 필드의 집합.

        : Primary Key는 테이블에서 각 레코드를 식별하는 데 사용되며,

          테이블의 각 레코드에는 Primary Key 값이 반드시 있어야 함. 

 

 

✅ Primary Key 특징

        👉 각 레코드에 대해 고유하다.(Unique)

        👉 NULL 값이 허용 안됨(NOT NULL)

        👉 레코드를 식별하는 데 사용 , 테이블당 하나의 기본키만 지정 가능 

 

 

✅ Primary Key  생성 방법 

 

✔️ 기본키 생성 방법1

CREATE TABLE  users(
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100),
  password VARCHAR(50)
);

 

✔️ 기본키 생성 방법2

CREATE TABLE users (
  id INT NOT NULL,
  name VARCHAR(50),
  email VARCHAR(100),
  password VARCHAR(50),
  PRIMARY KEY (id)
);

 

 

✅ Primary Key  변경하기 

 

✔️ 1) Primary Key 삭제 

ALTER TABLE users DROP PRIMARY KEY;

✨ Primary Key 삭제 쿼리를 실행하기 전에 반드시 기본키다 다른 테이블에서 참조되지 않는지 확인해야 함.

        👉 참조 무결성 제약조건 위배로 인해 데이터베이스가 손상될 수 있음

✨ 기본키를 삭제하려면 먼저 해당 키가 참조하는 외래 키(Foreign Key)를 삭제해야 함. 

 

 

✔️ 2) Primary Key 생성 

ALTER TABLE users ADD PRIMARY KEY (name);

 

 

✅ 다중 Primary Key  

CREATE TABLE users (
  id INT NOT NULL ,
  name VARCHAR(50),
  email VARCHAR(100),
  password VARCHAR(50),
  PRIMARY KEY (id, name)
);

 

 

 

 

2. 고유키 (Unique Key)

 

 

 

✅ Unique Key, 고유키란?

        : 테이블에서 특정 필드의 값을 고유하게 만들기 위해 사용 

        : 고유키는 Primary Key와 마찬가지로 각 레코드를 식별하는 데 사용 

        : Primary Ket와 달리, 고유키는 NULL 값을 포함할 수 있음 

 

 

✅ Unique Key 생성 

 

✔️ 고유키 생성 방법1

CREATE TABLE  users(
  id INT PRIMARY KEY  AUTO_INCREMENT,
  name VARCHAR(50) UNIQUE ,
  email VARCHAR(100),
  password VARCHAR(50)
);

 

✔️ 고유키 생성 방법2

CREATE TABLE  users(
  id INT PRIMARY KEY  AUTO_INCREMENT,
  name VARCHAR(50) ,
  email VARCHAR(100),
  password VARCHAR(50),
  UNIQUE(name)
);

 

✔️ 기존 테이블에 고유키 추가하기 

ALTER TABLE users ADD CONSTRAINT unique_password UNIQUE (password);

 

✔️ 고유키 삭제하기 

 

ALTER TABLE table_name DROP INDEX index_name;

## 고유키 삭제 쿼리
ALTER TABLE users DROP INDEX unique_password;

 

👉 고유키도 기본키와 마찬가지로 다중 고유키를 생성할 수 있음.

 

 

 

 

3. 외래키 (Foreign Key)

 

 

 

✅ Foreign Key, 외래키란?

        : 외래키는 하나의 테이블에서 다른 테이블의 기본키를 참조하는 키. 

        : 외래키는 데이터베이스에서 데이터 무결성(Integrity)을 유지하는 데 중요한 역할을 함.

 

 

✅ 외래키 이점

       👉 데이터 무결성 유지

               : 외래키를 사용하면 데이터베이스에서 참조 무결성(Referential Integrity)을 유지할 수 있음.

               : 즉,  자식 테이블의 레코드를 삭제하거나 업데이트할 때 부모 테이블의 기본키를 참조하지 않으면

                 데이터베이스에서 오류를 발생시킴. 

       👉 데이터 일관성 유지

               : 외래키를 사용하면 부모 테이블에서 레코드를 업데이트하거나 삭제할 때 자식 테이블에서도 일관성을 유지할 수 있음.

       👉 관계 정의 

               :  외래 키를 사용하면 데이터베이스에서 테이블 간의 관계를 정의할 수 있음. 이를 통해 두 개 이상의 테이블에서 

                  데이터를 쉽게 검색하고 조인할 수 있음.

 

 

✅ Foreign Key 생성 방법 

 

✔️ CREATE 문으로 FOREIGN KEY 설정

CREATE TABLE child_table ( #child_table 자식 테이블 
  child_column INT NOT NULL, #자식 테이블에서 외래키로 사용될 필드 
  ...
  FOREIGN KEY (child_column) REFERENCES parent_table(parent_column) # parent_table 부모 테이블
);
DROP TABLE IF EXISTS customers;
CREATE TABLE customers (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) UNIQUE
);

DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
  order_id INT NOT NULL PRIMARY KEY,
  customer_id INT,
  order_date DATE,
  total DECIMAL(10,2),
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);

 

✔️ ALTER 문으로 FOREIGN KEY 설정

ALTER TABLE child_table   # 자식 테이블 
ADD CONSTRAINT fk_constraint_name # fk_constraint_name foreign key 제약 조건의 이름
FOREIGN KEY (child_column)  # 자식테이블에서 외래키로 사용될 컬럼
REFERENCES parent_table(parent_column);  # 부모 테이블의 컬럼 이름
ALTER TABLE orders
ADD CONSTRAINT fk_customer_id
FOREIGN KEY (customer_id) REFERENCES customers(id);

 

✔️  외래키 삭제 

ALTER TABLE orders DROP FOREIGN KEY fk_customer_id;

 

✔️  제약조건 이름 확인 

SHOW CREATE TABLE orders

 

 

 

 

4. 외래키 제약조건

 

 

FOREIGN KEY 제약 조건에 의해 참조되는 테이블에서 데이터의 수정이나 삭제가 발생하면,

참조하고 있는 테이블의 데이터도 같이 영향을 받음

 

이때 참조하고 있는 테이블의 동작은 다음 키워드를 사용하여 FOREIGN KEY 제약 조건에서 미리 설정할 수 있음.

 

✅ ON DELETE

        : 외래키가 참조하는 테이블 행이 삭제될 때 실행되는 동작을 지정 

 

         👉 CASCADE  : 외래키가 참조하는 모든 행도 함께 삭제

         👉 SET NULL : 외래키 값을 NULL로 설정(자식 외래키가 NOT NULL일 시 설정 불가)

         👉 SET DEFAULT : 외래키 값을 기본값으로 설정(InnoDB 엔진에서 사용 불가)

         👉 RESTRICT : 외래키가 참조하는 행이 있으면 삭제를 거부  

 

✅ ON UPDATE

        : 외래키가 참조하는 테이블의 행이 업데이트될 때 실행되는 동작을 지정

 

         👉 CASCADE  : 외래키가 참조하는 모든 행도 함께 업데이트

         👉 SET NULL : 외래키 값을 NULL로 설정(자식 외래키가 NOT NULL일 시 설정 불가)

         👉 SET DEFAULT : 외래키 값을 기본값으로 설정(InnoDB 엔진에서 사용 불가)

         👉 RESTRICT : 외래키가 참조하는 행이 있으면 삭제를 거부  

 

 

✔️ 주문(order) 테이블에서 고객(customer) 테이블의 ID를 참조하는 외래키 제약조건 설정

 

👉 고객(customer) 테이블 생성 

CREATE TABLE customer (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

 

👉 주문(orders) 테이블 생성 

CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  amount DECIMAL(10,2),
  FOREIGN KEY (customer_id) REFERENCES customer(id) ON DELETE CASCADE ON UPDATE CASCADE
);

 

 

 

 

 

 

 

 


출처 및 참고 문헌(reference)

 

 

Contents