개발자 끄적끄적
무결성 제약 조건 본문
<무결성 제약 조건>
<제약 조건의 목적>
- 데이터 무결성 유지
- relation을 보다 견고하게
<무결성 제약조건의 종류>
1. PRIMARY KEY(PK)
- NOT NULL, UNIQUE의 특성을 갖고 있고 테이블당 하나만 존재
- 둘 이상의 컬럼을 묶어 하나의 PK를 선언 할 수 있다->복합키
- 자동으로 INDEX가 만들어진다
2. FOREIGN KEY(FK)
- 외래키. 자식테이블의 데이터가 존재했을 때 부모 테이블의 데이터가
삭제되거나 수정되는 것을 예방
- ON CASSE UPDATE나 ON CASCASE DELETE 옵션을 사용하여
부모 테이블의 데이터가 삭제되거나 수정되었을 때 자식 테이블의 데이터를
삭제하거나 수정할 수 있게 할 수는 있다
- 부모 테이블의 컬럼은 PK나 UNIQUE 제약 조건이 설정되어 있어야 한다
3. NOT NULL
- NULL값을 허용하지 않는다
- 컬럼 생성 시 기본이 NULL이기 때문에 컬럼에 제약 조건을 수정할 때
ADD를 사용하지 않고 MODIFY를 사용한다
4. UNIQUE
- 하나의 NULL은 허용하고, 중복되지 않는 데이터를 유지하기 위해 사용된다
- 자동으로 INDEX가 만들어진다
5. CHECK
- 허용되는 값을 일정하게 지정하거나 범위를 줄 수 있다
- MariaDB 10, Mysql 8버전 이상부터 지원한다
6. DEFAULT
- 입력되는 값이 NULL값일 때 특정 값이 입력 값이 되도록 설정 할 수 있다
- 제약조건을 수정할 때 ADD를 사용하지 않고 MODIFY를 사용한다
<제약조건 확인>
- 데이터 베이스명을 information_schema로 변경한 뒤 작업한다
->USE information_schema
SHOW TABLES
SELECT* FROM table_constraint
<테이블 생성 후 제약 조건 수정>
[PRIMARY KEY]
<추가>
ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] PRIMARY KEY(컬럼명)
ALTER TABLE 테이블명 MODIFY COLUMN 필드명 필드타입 PRIMARY KEY
ALTER TABLE 테이블명 MODIFY COLUMN [CONSTRAINT 제약조건명]
PRIMARY KEY(필드명)
<삭제>
ALTER TABLE 테이블명 DROP PRIMARY KEY
[FOREIGN KEY]
<추가>
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 FOREIGN KEY(컬럼명)
REFERENCES 부모 테이블명(PK 컬럼명)
[ON DELETE CASCADE] [ON UPDATE CASCADE]
<삭제>
ALTER TABLE 테이블명 DROP FOREIGN KEY 제약 조건명
[NULL | NOT NULL]
<수정>
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 자료형[NULL OR NOT NULL]
*NULL과 NOT NULL 제약 조건은 ADD로 하지 않고 MODIFY로 수정한다
따라서, DROP을 하지 않고, NULL 또는 NOT NULL로 수정한다
[UNIQUE]
<추가>
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 UNIQUE(컬럼명1, [컬럼명2...])
<삭제>
ALTER TABLE 테이블명 DROP INDEX 제약조건명
DROP INDEX 제약조건명 ON 테이블명
[CHECK]
<추가>
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 CHECK(조건)
<삭제>
ALTER TABLE 테이블명 DROP CONTRAINT 제약조건명
[DEFAULT]
<추가>
ALTER TALBLE 테이블명 ALTER COLUMN 컬럼명 SET DEFAULT 값
<삭제>
ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 SET DEFAULT NULL
*제약조건 삭제 시 오류가 발생한다면 외래키 제약조건 때문일 가능성이 높다
따라서, 외래키 제약조건을 먼저 삭제한 후 진행한다
<제약 조건의 활성화 | 비활성화>
- 설정된 제약 조건을 삭제하지 않고 임시로 활성화, 비활성화를 통해
제약조건을 제어 할 수 있다
[활성화]
ALTER TABLE 테이블명 ENABLE CONSTRAINT 제약조건
[비활성화]
ALTER TABLE 테이블명 DISABLE CONSTRAINT 제약조건
제약조건
- 기존 테이블에 제약 조건을 수정하거나 추가할 때 유의 사항
-> 기존에 저장되어있는 데이터가 지정할 제약 조건에 위배되는 값이
있어서는 안된다
ex) primary key로 sno컬럼을 지정하려 할 때, sno컬럼에는 null값이나
중복된 값이 저장되어 있으면 primary key로 지정할 수 없다