본문 바로가기
  • Coding & Book
학습단/SQL 학습단

혼공스 14일차(제약조건으로 테이블을 견고 하게 만들기)

by 루이3 2023. 7. 27.

제약조건

  • 기본 키와 외래 키대표적인 제약조건입니다.
  • 기본키는 고유한 번호를 의미하는 열에 외래 키는 기본 키와 연결되는 열에 지정합니다.
  • 제약조건으로 기본값을 설정할 수 있습니다.
  • 제약조건은 데이터의 무결성을 지키기 위해 제한하는 조건입니다.
  • 데이터의 무결성이란 말그대로 데이터에 결함이 없음 이란 의미입니다.
  • 결함을 방지하기 위해서 회원 테이블의 아이디를 기본키로 지정할 수 있습니다.

 

테이블 삭제하는 순서

  • 테이블이 기본키-외래 키로 연결되어 있는 관계인경우 외래키가 설정된 테이블을 먼저 삭제해야 합니다.

 

 

기본키 제약조건

  • 데이터를 구분 할 수 있는 식별자기본 키라고 부릅니다.

 

CREATE TABLE에서 설정하는 기본 키 제약조건

기본키를 생성하는 방법은 전에 했듯이 CREATE TABLE 문에 PRIMARY KEY예약어를 넣어주면 됩니다.

아래 코드는 생성하는 방법입니다.

USE naver_db;
DROP TABLE IF EXISTS buy, member;
CREATE TABLE member 
( mem_id	CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name	VARCHAR(10) NOT NULL, 
  height	TINYINT UNSIGNED NULL
);

 

아래 코드를 실행 후 테이블의 정보를 볼 수 있습니다.(DESCRIBE 문을 사용)

 

CREATE  TABLE에서 기본 키를 지정하는 방법은

제일 마지막 행PRIMARY KEY(열_이름)을 붙여주면 되고 그러면 그 열이 기본키로 설정됩니다.

DROP TABLE IF EXISTS member;
CREATE TABLE member 
( mem_id	CHAR(8) NOT NULL, 
  mem_name	VARCHAR(10) NOT NULL, 
  height	TINYINT UNSIGNED NULL,
  PRIMARY KEY (mem_id)
);

 

 

ALTER TABLE에서 설정하는 기본 키 제약조건

  • 제약 조건을 설정하는 또 다른 방법입니다.
  • ALTER TABLE 구문을 사용하는 것입니다.
  • CREATE  TABLE과 동일한 결과를 갖습니다.
DROP TABLE IF EXISTS member;
CREATE TABLE member 
(   mem_id  CHAR(8) NOT NULL, 
    mem_name    VARCHAR(10) NOT NULL, 
    height      TINYINT UNSIGNED NULL
);
ALTER TABLE member
     ADD CONSTRAINT 
     PRIMARY KEY (mem_id);

 

 

외래키 제약조건

  • 외래키 제약 조건은 두 테이블 사이의 관계를 연결해 줍니다.
  • 데이터의 무결성을 보장해 주는 역할을 합니다.
  • 기본키가 있는 회원테이블을 기준테이블, 외래 키가 있는 구매 테이블을 참조키라고 부릅니다.

 

 

CREATE TABLE에서 설정하는 외래 키 제약조건

  • 외래 키를 생성하는 방법은 CREATE TABLE 끝에 FOREIGN 키워드를 설정하면 됩니다.
  • 외래키의 형식은 FOREIGN(열_이름) REFERENCES 기준_테이블(열_이름)입니다.
  • 기준테이블 열이 Primary Key  또는 Unique가 아니라면 외래 키 관계는 설정되지 않습니다.
CREATE TABLE member 
(	mem_id	CHAR(8) NOT NULL PRIMARY KEY, 
 	mem_name	VARCHAR(10) NOT NULL, 
 	height	TINYINT UNSIGNED NULL
);
CREATE TABLE buy 
(   num	INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    mem_id	CHAR(8) NOT NULL, 
    prod_name	CHAR(6) NOT NULL, 
    FOREIGN KEY(mem_id) REFERENCES member(mem_id)
);

 

ALTER TABLE에서 설정하는 외래 키 제약조건

  • 기본키와 비슷하게 ALTER TABLE 구문을 사용하시면 됩니다.
ALTER TABLE buy
    ADD CONSTRAINT 
    FOREIGN KEY(mem_id) 
    REFERENCES member(mem_id);

 

 

 

 ON UPDATE CASCADE

  • 기준 테이블의 열 이름이 변경될때 참조 테이블의 열이름도 자동으로 변경되게 할 수 있습니다.
  • 예시로 회원테이블의 BLK가 PINK로 변경되면 자동으로 구매테이블도 변경됩니다.

 

ON DELETE CASCADE

  •  ON UPDATE CASCADE와 마찬가지로 기준 테이블의 데이터가 삭제되면
    참조 테이블의 데이터도 삭제되는 기능입니다.

 

고유키 제약 조건

  • 고유키 제약 조건은 중복되지 않는 유일한 값을 입력해야 하는 조건입니다.
  • 기본키 제약조건과 차이점은 NULL 값을  고유키는 허용한다는 것입니다.
  • 두 번째 차이점으로 고유키는 테이블에 여러 개를 설정해도 됩니다.

 

체크 제약조건

  • 체크 제약조건은 입력되는 데이터를 점검하는 기능을 하는 것입니다.
  • 예를 들어 값에 마이너스 값이 입력되지 않게 하거나 전화번호 국번처럼 02, 031 중 하나만 입력되도록
    할 수 있습니다.
  • 열의 정의 뒤에 CHECK(조건)을 추가하면 됩니다.
DROP TABLE IF EXISTS member;
CREATE TABLE member 
( 	mem_id	CHAR(8) NOT NULL PRIMARY KEY, 
  	mem_name	VARCHAR(10) NOT NULL, 
 	height	TINYINT UNSIGNED NULL CHECK (height >= 100),
 	phone1	CHAR(3)  NULL
);

 

여기서 제약조건 값이 위배되었을 경우 오류가 납니다.

INSERT INTO member VALUES('BLK', '블랙핑크', 99, NULL);

 

 

 

 

기본값 정의

  • 기본값 정의는 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법입니다.

 

예시로 키를 기본적으로 170이라고 해놓겠습니다.

DROP TABLE IF EXISTS member;
CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL DEFAULT 170
);

 

기본값이 설정된 열에 default를 써주시면 아까 설정했던 170 나오는 것을 확인할 수 있습니다.

INSERT INTO member VALUES('BLK', '블랙핑크', default);
SELECT * FROM member;

 

널값 허용

  • 널값을 허용하려면 생략하거나 NULL을 사용하고 허용하지 않으려면 NOT NULL을 사용하시면 됩니다.
  • PK 가 설정된 열에는 NULL 값이 있을 수 없으므로 생략 시 NOT NULL로 인식이 됩니다.
  • 공백이나 0과는 다릅니다.