728x90
제약 조건이란 간단히 말하면 하자요인이 있는 데이터를 걸러내는 기능이라 볼 수 있다. 즉, 점수는 0~100 사이만 입력되게 한다던지, 글의 제목은 반드시 있어야 하고, 답글이 있는 경우 본문글만을 삭제하지 못하도록 만드는 기능이라 생각하면 될 것이다.
4.1. 제약 조건의 목적
- 데이터의 무결성 유지 : 하자가 있는 데이터가 발생하지 않도록 하는것.
- relation을 보다 견고하게 : 테이블 사이의 데이터 연결이 반드시 유지 되도록 하는것
4.2. 무결성 제약조건의 종류
제약 조건명 | 설명 |
PRIMARY KEY(PK) | - NOT NULL, UNIQUE의 특성을 갖고 있고 테이블당 하나만 존재. - 둘 이상의 컬럼을 묶어 하나의 PK를 선언할 수 있음. - 자동으로 INDEX가 만들어진다. |
FOREIGN KEY(FK) | - 외래키. 자식테이블의 데이터가 존재했을 때 부모 테이블의 데이터가 삭제되거나 수정되는 것을 예방. ON CASCASE UPDATE나 ON CASCASE DELETE 옵션을 사용하여 부모 테이블의 데이터가 삭제되거나 수정되었을 때 자식 테이블의 데이터를 삭제하거나 수정할 수 있게 할수는 있다. - 부모 테이블의 컬럼은 PK나 UNIQUE 제약 조건이 설정되어 있어야 한다. |
NOT NULL | - NULL 값을 허용하지 않는다. 컬럼 생성시 기본이 NULL이기 때문에 컬럼에 제약 조건을 수정할 때 ADD를 사용하지 않고 MODIFY를 사용한다. |
UNIQUE | - 하나의 NULL은 허용하고, 중복되지 않는 데이터를 유지하기 위해 사용됨. - 자동으로 INDEX가 만들어진다. |
CHECK | - 허용되는 값을 일정하게 지정하거나 범위를 줄수 있다. - MariaDB 10, Mysql 8 버전 이상부터 지원 |
DEFAULT | - 입력되는 값이 NULL값일때 특정값이 입력값이 되도록 설정할 수 있다. - 제약조건을 수정할 때 ADD를 사용하지 않고 MODIFY를 사용한다. |
4.3. 제약조건 확인
데이터 베이스명을 information_schema로 변경한 뒤 작업한다.
USE information_schema show tables SELECT * FROM table_constraints |
4.4. 제약 조건 설정하기
[TYPE 1]
컬럼을 지정하면서 제약 조건 설정하기
create table student(
sno int primary key,
mname varchar(20) not null,
phone varchar(30) unique,
address varchar(50) default ‘seoul’ ,
gender varchar(2) check( gender in('f','m') ),
zipcode int,
score int check( score between 0 and 100),
foreign key(zipcode) references member(sno) [on delete cascade] [on update cascade]
);
[TYPE 2]
컬럼을 모두 지정한 후 뒤에 제약 조건 설정하기
create table student(
sno int ,
mname varchar(20) not null,
phone varchar(30),
address varchar(50) default 'seoul',
gender varchar(2),
zipcode int,
score int,
constraint std_sno_pk primary key(sno),
constraint std_gender check(gender in('f','m')),
constraint std_phone_uk unique(phone),
constraint std_zipcode_fk foreign key(zipcode) references member(sno)
[on delete cascade] [on update cascade]
);
4.5. 테이블 생성 후 제약 조건 수정
[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 CONSTRAINT 제약 조건명 |
[DEFAULT]
추가 | ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 SET DEFAULT 값 |
삭제 | ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 SET DEFAULT NULL |
* 제약조건 삭제시 오류가 발생한다면 외래키 제약조건 때문일 가능성이 높다. 따라서 외래키 제약조건을 먼저 삭제한 후 진행한다.
4.6. 제약 조건의 활성화 / 비활성화
설정된 제약 조건을 삭제하지 않고 임시로 활성화 비활성화를 통해 제약조건을 제어 할 수 있다.
활성화 | ALTER TABLE 테이블명 ENABLE CONSTRAINT 제약조건 |
비 활성화 | ALTER TABLE 테이블명 DISABLE CONSTRAINT 제약조건 |
'BOOKS > MySQL' 카테고리의 다른 글
MySQL에서 데이터의 대소문자 구분 (0) | 2022.11.15 |
---|---|
mysql 데몬조차 실행되지 않을 때 (0) | 2022.11.13 |
heidiSQL 툴 사용시 함수 생성 오류 (0) | 2022.11.13 |
3. TABLE 생성및 변경 (0) | 2022.03.01 |
mysql을 USB에 담아 가지고 다니자(portable 타입으로 설치하기) (2) | 2021.10.06 |