My SQL 4일차

5w31892p·2023년 1월 12일
0

My SQL

목록 보기
4/4

세로 : 열 (column) == 필드 == 속성 (attribute)
가로 : 행 (row) == 튜플 == 레코드

:: 제약조건 (Constraint)

  • 데이터 무결성을 지키기 위해 제한하는 조건
    • 무결성이 없는 것은 혼란스러운 상황
      ex ) 같은 아이디로 가입이 가능하다면?
        회원탈퇴로 memberTable에선 삭제가 되었는데 buyTable에서는 삭제가 안된다면?
  • 데이터 입력 받을 때 실행되는 검사 규칙

:: 제약조건 종류

  • Primary Key 제약조건
  • Foreign Key 제약조건
  • Unique 제약조건
  • Check 제약조건
  • Default 정의
  • Null값 허용

:: 제약조건 거는 방법

  • 테이블 만들 때 각 열에 제약조건을 걸면 됨

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

  • NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
  • NULL값 가질 수 없고, 중복된 값 가질 수 없다.
  • 테이블당 오직 하나의 필드에만 설정 가능
    cf. UNIQUE는 한 테이블에 여러 필드 설정이 가능
  • 하나의 필드에만 설정이 가능하기 때문에 데이터를 쉽고 빠르게 찾도록 도와준다.

CREATE 문으로 PRIMARY KEY 설정

CREATE TABLE 테이블이름
(필드이름 필드타입 PRIMARY KEY, ...)

// 아래 방법을 사용하면 해당 제약조건에 이름 설정이 가능함
CREATE TABLE 테이블이름
(필드이름 필드타입, ...,
[CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름))

ALTER 문으로 PRIMARY KEY 설정

  1. 새로운 필드 추가할 때 해당 필드를 기본 키로 설정
ALTER TABLE 테이블이름
ADD 필드이름 필드타입 PRIMARY KEY

//or

ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)
  1. 기존 필드를 기본 키로 설정
    • 기존 필드를 제약조건을 추가할 때에는 해당 기존 필드는 NULL 값을 갖지 않도록 미리 선언이 되어 있어야 한다.
ALTER TABLE 테이블이름
MODIFY COLUMN 필드이름 필드타입 PRIMARY KEY

//or

ALTER TABLE 테이블이름
MODIFY COLUMN [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)

PRIMARY KEY 제약조건 삭제

ALTER TABLE 테이블이름
DROP PRIMARY KEY

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

  • 한 테이블을 다른 테이블과 연결해주는 역할
  • 일대다 관계에서 외래키 설정
  • 외래키가 설정된 테이블에 레코드를 입력하면, 기준이 되는 테이블의 내용을 참조해서 레코드 입력
  • 하나의 테이블을 다른 테이블에 의존하게 만든다.
  • 참조되는 테이블의 필드는 반드시 UNIQUE 나 Primary Key 제약조건 설정이 되어 있어야 한다.

CREATE 문으로 FOREIGN KEY 설정

  • 참조하고 있는 테이블의 컬럼 변경시 외래키 참조 받는 해당 필드도 같이 변경된다.
CREATE TABLE 테이블이름 
( 
	필드이름 필드타입, ...,
	[CONSTRAINT 제약조건이름]
	FOREIGN KEY (필드이름) 
	REFERENCES 테이블이름 (필드이름) // 참조하고 있는 테이블의 컬럼
)
// FOREIGN KEY (필드이름) 의 필드는 REFERENCES 테이블이름 (필드이름) 를 참조 

ALTER 문으로 FOREIGN KEY 설정

ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름) // 참조하는 테이블의 컬럼

FOREIGN KEY 제약 조건 삭제

ALTER TABLE 테이블이름
DROP FOREIGN KEY 제약조건이름

ON DELETE, ON UPDATE

  • 위에서 본 것과 같이 참조되는 테이블 (REFERENCES ~~) 의 수정, 삭제 발생 시 참조하고 있는 테이블의 데이터도 영향
  • 이럴 때 삭제의 경우에는 ON DELETE 로, 수정ON UPDATE 구문으로 설정이 가능하다

설정할 수 있는 동작

  1. CASCADE
    참조되는 테이블 데이터 삭제 수정하면, 참조하는 테이블도 같이 이뤄진다.

  2. SET NULL
    참조되는 테이블 데이터 삭제 수정하면, NULL로 변경

  3. NO ACTION
    참조되는 테이블 데이터 삭제, 수정해도 변경없음

  4. SET DEFAULT
    참조되는 테이블 데이터 삭제, 수정하면 필드 기본 값으로 설정된다.

  5. RESTRICT
    참조되는 테이블 데이터 남아 있으면, 데이터 삭제 수정 할 수 없다.

:: UNIQUE

  • 해당 필드는 서로 다른 값을 가져야 한다.
  • 중복된 값을 저장할 수 없다.
CREATE TABLE 테이블이름
(
	필드명 필드타입 UNIQUE, ...
)

:: DEFAULT

  • 해당 필드의 기본 값 설정
  • 레코드 입력시 해당 필드 값 전달 안하면 자동 설정된 기본값 저장
  • 기본 값으로 넣을 값은 지정
    ex ) Name VARCHAR(30) DEFAULT 'Anonymous'
CREATE TABLE 테이블이름
(
	필드이름 필드타입 DEFAULT 기본값, ...
)

:: NOT NULL

  • 해당 필드 NULL 저장할 수 없다.
  • NOT NULL이 설정된 필드는 무조건 데이터를 가지고 있어야 한다.
CREATE TABLE 테이블이름
(
    필드이름 필드타입 NOT NULL, ...
)

:: 기타 제약조건

  • 고유 키 제약 조건 - 중복되지 않는 유일한 값만 입력 가능
  • 체크 제약 조건 - 조건에 만족 되는 값만 입력 가능
  • 기본값 정의 - 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정
  • 널 값 허용 - NULL or NOT NULL
mem_id char(8) not null primary key
height tinyint unsigned null check (height >= 100)

0개의 댓글