MySQL 외래 키 조건 - MySQL oelae ki jogeon

기본키 설정을 하면 해당 필드는 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.

1) CREATE문으로 설정(생성)

CREATE TABLE 테이블이름 ( 필드이름 필드타입 PRIMARY KEY, ... )CREATE TABLE 테이블이름 ( 필드이름 필드타입, ..., [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름) )

2) ALTER문으로 설정(추가, 수정)

-- 추가 ALTER TABLE 테이블이름 ADD 필드이름 필드타입 PRIMARY KEY ALTER TABLE 테이블이름 ADD [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)-- 수정 ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입 PRIMARY KEY ALTER TABLE 테이블이름 MODIFY COLUMN [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)

3) 제약조건 삭제

ALTER TABLE 테이블이름 DROP PRIMARY KEY

FOREIGN KEY

테이블들을 연결해주는 역할을 한다.

외래 키가 설정된 테이블에 레코드를 입력하면, 기준이 되는 테이블의 내용을 참조해서 레코드가 입력된다.

하나의 테이블을 다른 테이블에 의존하게 만드는 성격을 가지고 있다.

FOREIGN 키를 설정할 때에는 참조되는 테이블의 필드가 반드시 UNIQUE나 PRIMARY KEY가 설정되어 있어야 한다.

1) CREATE문으로 설정(생성)

CREATE TABLE 테이블이름 ( 필드이름 필드타입, ..., [CONSTRAINT 제약조건이름] FOREIGN KEY (필드이름) REFERENCES 테이블이름 (필드이름) )

2) ALTER문으로 설정(추가, 수정)

ALTER TABLE 테이블이름 ADD [CONSTRAINT 제약조건이름] FOREIGN KEY (필드이름) REFERENCES 테이블이름 (필드이름)

3) 제약조건 삭제

ALTER TABLE 테이블이름 DROP FOREIGN KEY 제약조건이름

4) ON DELETE, ON UPDATE

외래키에 의해 참조되는 테이블에서 데이터의 수정이나 삭제가 발생하면, 참조하고 있는 테이블의 데이터도 영향을 받는다.

이때 참조하고 있는 테이블의 동작을 ON DELETE, ON UPDATE 키워드를 이용하여 미리 설정할 수 있다.

CASCADE 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다.
SET NULL 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 NULL로 변경됩니다.
NO ACTION  참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.
SET DEFAULT 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.
RESTRICT 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.
CREATE TABLE Test2 ( ID INT, ParentID INT, FOREIGN KEY (ParentID) REFERENCES Test1(ID) ON UPDATE CASCADE ON DELETE RESTRICT );

CREATE TABLE ids_info( GTIN_13 varchar(14), PRIMARY KEY(order_id), FOREIGN KEY (product_id) REFERENCES products );

외래키를 처음부터 이렇게 잘 만들어놨다면 상관없지만,

중간에 외래키를 추가/변경해야 할 때가 있다.

난 product_id를 외래키로 만들려고 한다.

난 위에처럼 컬럼조차 만들어놓지 않았다.

1. 컬럼 추가/삭제 방법

컬럼 추가 방법
alter table [테이블명] add [컬럼명] [타입];

컬럼 삭제 방법
alter table [테이블명] drop [컬럼명] [타입];예시
>alter table ids_info add product_id int(100) not null;

not null을 까먹어서 다시 삭제하고 만들어주었다.

2. 외래키 지정 방법

이제 외래키로 지정해주어야 한다.

외래키 지정 방법
alter table [테이블명] add foreign key( [컬럼명] ) references [참조한 테이블]( [참조할 컬럼명] ) [옵션];

[]를 생략하고 넣고 싶은 값을 넣으면 된다.

마찬가지로 옵션에는 on delete cascade / on update cascade을 넣을 수 있다.

update는 이 값이 바뀔 때마다 나도 갱신, delete는 참조하는 키가 삭제되면 나도 삭제. 로 이해하면 된다.

이걸 까먹었어서 또 외래키를 삭제해야 한다..

3. 외래키 삭제

외래키를 삭제하기 위해선, 제약조건을 확인해야 한다.

제약조건 확인 방법
select * from information_schema.table_constraints;
테이블명을 딱 정해서 보는 것을 추천
select * from information_schema.table_constraints where table_name = '테이블명';

난 아까 잘못해서 ids_info_ibfk_1, 2 제약조건이 이렇게 2개임을 확인할 수 있다.

외래키 삭제

alter table [테이블명] drop foreign key [확인한 제약조건명];

외래키로 삭제해서 컬럼도 잘 삭제됨을 확인할 수 있다.

마지막 옵션까지 잘 줘서 추가한 외래키....

Toplist

최신 우편물

태그