제수기 - 제발 수업내용을 기억하자
-- 제약조건
-- 테이블 작성 시 각 컬럼에 값 기록에 대한 제약조건을 설정할 수 있다.
-- 데이터 무결성 보장을 목적으로 함
-- 입력/수정하는 데이터에 문제가 없는지 자동으로 검사해 주게 하기 위한 목적
-- PRIMARY KEY, NOT NULL, UNIQUE, CHECK, FOREIGN KEY
# 제약조건명
-- PRIMARY KEY의 제약조건명은 PRIMARY이다. 작성해도 무시된다. 고로 컬럼레벨에 작성하자.
-- UNIQUE, FOREIGN KEY, CHECK의 제약조건명은 `접두사_컬럼명` 형식으로 작성한다.
-- (테이블명을 생략해도 오류메세지에서 충분히 확인가능하다)
-- NOT NULL은 제약조건명을 지정하지 않는다.
컬럼에 null값을 허용하지 않음.
not null
적용-- 컬럼에 중복값을 허용하지 않는 제약조건
-- 중복되면 안될 사용자 아이디, 사용자 이메일 등에 사용하면 좋다.
-- 컬럼n개를 조합해서 중복여부를 관리할 수도 있다.
null
값은 unique
와 상관 없다. 삽입된다.unique
제약조건으로 지정했다. 이렇게 컬럼과 나란히 쓰면 테이블 레벨인건데, 테이블 레벨에만 저렇게 쓸 수 있다.unique
해놨으니까 중복 팔로우를 하면 에러가 난다.-- 기본키(주키)
-- 테이블에서 정확히 한 행을 식별하기 위한 용도의 제약조건
-- null을 허용하지 않고, 중복하는 것도 허용하지 않는다.
-- table당 하나만 선언 가능하다.
-- n개의 컬럼을 묶어서 복합기본키로도 지정할 수 있다.
🔍테이블간의 관계를 맺을 때 PK가 사용되기 때문에 중요하다.
-- 외래키(참조키)
-- 부모테이블의 참조하는 컬럼의 값만 사용하도록 제약
-- 외래키 제약조건은 자식테이블 컬럼에 적용한다.
-- 이때 참조하는 부모 테이블의 컬럼은 PK컬럼 또는 UNIQUE컬럼 이어야 한다.
다른말로 얘기하면 중복을 허용하지 않는 컬럼이어야 한다.
-- 외래키를 통해 연결된 두 테이블을 통해 이후 relation을 구성할 수 있다.
(join이나 subquery를 할 때 구심점 역할을 한다.)
자식행에서 참조하는 경우 부모행을 삭제할 수 없다.
하지만 방법이 있다. 자식-부모행 순으로 삭제하면 된다.
하지만 귀찮기 때문에,
on delete cascade
💥 자식/부모 구분하기 어렵다.
-- 컬럼에 입력값에 대해 값의 목록/조건을 지정하는 제약조건이다.
-- 성별 컬럼의 값을 M/F만 허용
-- 점수컬럼의 값을 0~100 사이만 허용