개발자 끄적끄적

무결성 제약 조건 본문

MySQL

무결성 제약 조건

햏치 2023. 3. 8. 00:22

<무결성 제약 조건>

<제약 조건의 목적>
- 데이터 무결성 유지
- 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로 지정할 수 없다

'MySQL' 카테고리의 다른 글

procedure  (0) 2023.03.08
테이블 관련  (0) 2023.03.08
function  (0) 2023.03.08