본문 바로가기
Database/mysql

[MYSQL / Database] constraint 제약조건

by JINJINC 2023. 4. 12.
728x90
반응형

 제약조건 CONSTRAINT 

 - 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 검사 규칙을 의미한다.

- 제약조건은 CREATE 문으로 테이블 생성할 때나, ALTER문으로 컬럼을 추가할 때도 설정할 수 있다.


< 제약조건 종류 > 

- NOT NULL : NULL값을 가지면 안되는 컬럼

- UNIQUE  :  같은 컬럼안에서 동일한 값을 가질 수 없다. MYSQL에서는 NULL을 여러번 지정가능

(MSSQL 은 NULL도  한번만 가능하다)

- PRIMARY KEY  : 행에 반드시 유일한 값이 들어가야함 ( NULL값을 가질 수 없다.) 

- FOREIGN KEY  

- DEFAULT

- CHECK


 제약조건 사용법

 

제약조건 확인


SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME='테이블명';


제약조건 추가 및 제거하기


ALTER   TABLE   [TABLE NAME]   ADD  제약조건(컬럼명);
ALTER   TABLE  [TABLE NAME]   DROP  제약조건;

ALTER TABLE [TABLE NAME] DROP CONSTRAINTS [컬럼명]  ;

 

ALTER TALBE [TALBE NAME] MODIFY [COLUMN NAME] [DATA TYPE] NOT NULL;

ALTER TABLE [TABLE NAME] MODIFY [CLUMN NAME] [DATA TYPE] NULL;


1. PRIMARY KEY 설정, 설정취소

alter table t1 add primary key(id); 
select * from information_schema.table_constraints where table_name='t1';
입력시 아래의 그림과 같이제약조건을 확인할 수 있습니다.

제약조건 확인

alter table t1 drop primary key;   => 제약조건을 없애준다.

 

2. NOT NULL/ NULL 설정하기

alter table t1 modify id int not null;
alter table t1 modify id int null;
DESC T1;

각각 설정하여 desc t1;으로 확인해 보았을 때

3. UNIQUE 설정, 취소

alter table t1 add unique(id);
alter table t1 drop constraint id;
desc t1;

UNIQUE 설정 &#44;해제

 

 

 

 

 

 

 

 

 

4. FOREIGN KEY 설정,해제 

ALTER TABLE [CHILD TABLE] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(CHILD 의 컬럼 명) REFERENCES [PARENTS TABLE ](PARENTS의 컬럼명) ; 

CONSTRAINT [제약조건이름] 으로 이름을 지정할 수 있다.

만약 따로 지정하지 않으면 자동생성 됩니다.

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME='CHILD TABLE';

의 결과로 제약조건의 이름을 확인해야 합니다. 

PARENT2의 값은 TABLE NAME1의 값을 참고한다. 

 

alter table t2 add constraint job_fk foreign key(job) references t1(job);

insert into t1 values(1,'음악');
insert into t2 values(1,'음악');
insert into t2 values(2,'미술');  =>  실패

T1의 값이 없기 때문에 가져올 수 없다. 

외래키 오류

 

 

foreing key 해제 하기 

ALTER TABLE [CHILD TABLE NAME] DROP CONSTRAINT 제약조건이름 ; 
alter table t2 drop constraint job_fk;

 

728x90
반응형

댓글