혼자 공부하는 SQL 13강

랄라콥스·2025년 2월 20일

혼자공부하는SQL

목록 보기
5/12

테이블 제약 조건

데이터 무결성을 위해 필요함!

🤔데이터 무결성이란? 데이터 내의 혼란이 없고, 결함이 없는 것을 의미

PK(PRIMARY KEY)

기본키: 데이터를 구분 할 수 있는 식별자

  • 중복 불가
  • NULL값 불가

ex. 회원 아이디 중복 안됨, 아이디 없이 회원가입 안됨

자동으로 클러스터형 인덱스가 생성됨

테이블당 기본키 속성은 한개만 지정할 수 있음

기본키 지정하는 SQL문
1.

CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL
);
CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL,
  PRIMARY KEY (mem_id)
);
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);
  • ALTER TABLE - 해당 테이블 정보 변경
    ** ADD CONSTRAINT 제약 조건 추가

1번을 가장 많이 사용하긴함~

FK(FOREIGN KEY)

두 테이블을 연결해주는 키
기준 테이블과 참조 테이블의 관계사이에 필요함

회원이 아니면 구매가 불가능 함

FK 지정하는 SQL문
1.

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)
);
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)
);

이런식으로 구매 테이블에서는 속성의 이름을 바꿔서 저장 시킬 수 있으나 권장하지 않음

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)
);

기준 테이블의 열이 변경되는 경우

회원이 구매한 이후, 회원 테이블의 아이디가 변경되었다면??


변경 자체가 안됨!!! -> 이로인해 데이터를 안전하게 잘 보관할 수 있음
삭제도 안됨
=> 데이터 무결성 보존

그런데도 하고 싶다면..ㅠㅠ

자동으로 양쪽 다 바꿔줘야함!
how?

ON UPDATE CASCADE
ON DELETE CASCADE

을 사용하면 됨



잘 바뀜



삭제도 잘 됨


UNIQUE

고유키 제약조건

고유키는 중복되지 않는 유일한 값이어야함

🤔기본키랑 뭐가 다르지?
기본키와 다르게 NULL값을 허용함!

CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL,
  email       CHAR(30)  NULL UNIQUE
);

체크 제약조건

입력되는 데이터 점검 기능

조건: 키는 100보다 큰 값만 입력 할 수 있음

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('TWC', '트와이스', 99, NULL);

입력 안됨

기본값 정의

값을 입력하지 않았을 때 자동으로 입력될 값 지정하기

CREATE TABLE member 
( mem_id  CHAR(8) NOT NULL PRIMARY KEY, 
  mem_name    VARCHAR(10) NOT NULL, 
  height      TINYINT UNSIGNED NULL DEFAULT 160,
  phone1      CHAR(3)  NULL
);
INSERT INTO member VALUES('SPC', '우주소녀', default, default);

이런식으로 입력

NULL값 허용

허용하지 않으려면 NOT NULL사용 = 반드시 입력해라!

profile
일단 책을 피자

0개의 댓글