Programming Language

[SQL] 4-2. SQL과 제약조건

wakelight23 2024. 12. 2. 21:16

더 자세하게 제약조건에 대해 알아보기

● 기본 키(Primary Key) 제약 조건 :

  - 테이블에 있는 데이터를 고유하게 구분할 수 있는 정보를 나타내기 위해 사용
  - 기본 키 설정하지 않은 테이블을 생성할 때 날 수 있는 Error ▼

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

 

- 어떤 식으로 SQL을 작성하는가? ▼

CREATE TABLE Users
(
    userId int(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name   varchar(255)
);

- AUTO_INCREMENT : 데이터를 삽입할 때 데이터를 입력하지 않더라도
                                       고유한 값 유지하도록 해주는 속성

 

● NULL 제약 조건 :

  - 특정 칼럼에서 NULL 값을 허용, 허용 하지 않도록 설정하는 조건
  - NULL = 값이 없음

  - 테이블에서 컬럼 생성할 때 추가 조건을 작성하지 않았을 때,
    헤딩 컬럼은 NULL 값을 허용한 상태
  - NULL 값을 허용하면 필수적으로 입력되어야하는 데이터 누락 위험이 있음

  - 특정 컬럼에서 NULL 값을 허용하지 않아야될 때 → NOT NULL

 

  - 어떤 상황에서 사용하는가? ▼

CREATE TABLE Users
(
    userId int(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name   varchar(255) NOT NULL
);

 

● 고유 (Unique) 제약 조건 :

  - 특정 컬럼에서 중복된 값이 허용되지 않도록 설정하는 조건

  - 예) 이메일, 아이디 등

  - 어떤 식으로 사용할까? ▼

CREATE TABLE Users
(
    userId int(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name   varchar(255) NOT NULL UNIQUE
);

 

  - 만약, INSERT를 사용하여 UNIQUE 처리 된 값에 값을 넣어려고 하면?

INSERT INTO Users (name) VALUES ('김철수');

 

→ Error! ▼▼▼

Error: ER_DUP_ENTRY: Duplicate entry '김철수' for key 'Users.name'

 

  - 기본 키(Primary Key)를 설정한 컬럼은 고유 제약 조건(Unique)이 자동으로 적용

 

● 외래 키(Foreign Key) 제약 조건 :

  - 테이블간의 연관 관계(Relation Ship)를 표현할 때 사용

  - 대표적인 3가지 형태 예시 설명 :
      1:1 - 1명의 사용자(User)는 1개의 사용자 정보(UserInfo)를 가질 수 있다

      1:N - 1명의 사용자(User)는 여러개의 주문(Order)을 할 수 있다.

       N:M - 여러명의 학생(Student)은 여러개의 학원(Academy)을 등록할 수 있다.

  - 사용 방법 ▼

CREATE TABLE 테이블명
  FOREIGN KEY (컬럼명) REFERENCES 참조_테이블명 (참조_컬럼명)
    ON DELETE [연계 참조 제약 조건]
    ON UPDATE [연계 참조 제약 조건]
);

- 기본적으로, 외래 키(Foregin key) 제약 조건CREATE TABLE 문을 사용하여
  테이블을 생성함과 동시에 정의

  - 어떤 식으로 사용할까? ▼

CREATE TABLE Garden
(
    gardenId INT(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name     VARCHAR(255) NOT NULL,
    address  VARCHAR(255) NOT NULL
);

CREATE TABLE GardenPlants
(
    gardenPlantsId INT(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    gardenId       INT(11)      NOT NULL,
    name           VARCHAR(255) NOT NULL,
    FOREIGN KEY (gardenId) REFERENCES Garden (gardenId)
);

- 외래 키(Foregin Key)를 사용하여 특정 GardenPlants 테이블 행이 어떤 Gardend에 속하는지 알 수 있다