반응형

[MariaDB] 마리아DB[MariaDB] 마리아DB 테이블 - 외래키 제약조건(FOREIGN KEY) (MySQL)

 

MariaDB는 데이터의 무결성을 위해서 다음의 6가지 제약조건을 제공합니다.

  1. PRIMARY KEY 제약조건
  2. FOREIGN KEY 제약조건
  3. UNIQUE 제약 조건
  4. CHECK 제약조건(MariaDB 10.2.1부터 지원, MySQL 8.0.16부터 지원)
  5. DEFAULT 정의
  6. NULL 값 허용

이번 포스팅에서는 외래키 제약조건에 대해서 설명하겠습니다.

 

외래키 제약조건

외래키 제약조건은 두 테이블 사이의 관계를 선언함으로써, 데이터의 무결성을 보장해 주는 역할을 합니다.

외래 키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 됩니다.

 

외래키 테이블에 데이터를 입력할 때는 꼭 기준 테이블을 참조해서 입력하므로, 기준 테이블에 이미 데이터가 존재해야 합니다.

기준 테이블의 기본키 열에 있는 값들만 현재테이블의 외래키 값으로 사용할 수 있고 다른 값을 넣으면 에러가 발생합니다.

 

외래키 테이블이 참조하는 기준 테이블의 열은 반드시 PRIMARY KEY(기본키)이거나, UNIQUE 제약 조건이 설정되어 있어야 합니다.

 

외래키 설정 방법은 아래 코드처럼 외래키 테이블에서 설정을 합니다.

DROP TABLE IF EXISTS buyTBL, userTBL;	-- 테이블이 존재할 경우 삭제(DROP)
CREATE TABLE userTBL 
( userID  CHAR(8) NOT NULL PRIMARY KEY, 	-- 기본키로 설정, 기본키는 반드시 NOT NULL
  name    VARCHAR(10) NOT NULL, 
  birthYear   INT NOT NULL 
);
CREATE TABLE buyTBL 
(  num INT AUTO_INCREMENT NOT NULL PRIMARY KEY , 	-- 기본키, NOT NULL, 자동증가 설정
   userID  CHAR(8) NOT NULL, 
   prodName CHAR(6) NOT NULL,
   FOREIGN KEY(userID) REFERENCES userTBL(userID)	-- 이 테이블의 외래키는 userID이고, userTBL 테이블의 userID 와 연결
);

 

외래키의 이름을 "FK_기준테이블명_외래키있는테이블명"으로 설정해두면 나중에 이름만 보고도 어떤 관계인지 알 수가 있습니다.

이렇게 외래키의 이름을 입력하고 싶다면 아래 처럼 "CONSTRAINT 외래키이름"을 추가해주면 됩니다.

(입력을 안할 경우 자동으로 이름이 랜덤하게 생성됨)

DROP TABLE IF EXISTS buyTBL;
CREATE TABLE buyTBL 
(  num INT AUTO_INCREMENT NOT NULL PRIMARY KEY , 
   userID  CHAR(8) NOT NULL, 
   prodName CHAR(6) NOT NULL,
   CONSTRAINT FK_userTBL_buyTBL FOREIGN KEY(userID) REFERENCES userTBL(userID)	-- CONSTRAINT 외래키이름 
);

 

생성된 외래키 이름이 잘 들어갔는제 SELECT문으로 확인해 봅니다.

select * from information_schema.table_constraints where table_name = 'buyTBL';	-- 테이블 정보확인

외래키 이름 확인

 

이미 생성된 테이블에 외래키를 지정하는 방법도 존재합니다.

ALTER TABLE 구문을 이용하는 방법입니다.

DROP TABLE IF EXISTS buyTBL, userTBL;
CREATE TABLE userTBL 
( userID  CHAR(8) NOT NULL PRIMARY KEY, 
  name    VARCHAR(10) NOT NULL, 
  birthYear   INT NOT NULL 
);
CREATE TABLE buyTBL 
(  num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
   userID  CHAR(8) NOT NULL, 
   prodName CHAR(6) NOT NULL 
);
ALTER TABLE buyTBL	-- 테이블 수정
    ADD CONSTRAINT FK_userTBL_buyTBL 	-- 제약조건 추가. 외래키 이름을 설정
    FOREIGN KEY (userID) 	-- 외래키 제약조건을 userID에 설정
    REFERENCES userTBL(userID);	-- 참조할 기준 테이블은 userTBL 테이블의 userID 열로 설정

 

외래키 옵션중에 ON DELETE CASCADE 또는 ON UPDATE CASCADE가 있습니다.

이는 기준 테이블의 데이터 값이 변경되었을때 외래키 테이블의 데이터 값도 자동으로 변경되도록 설정해줍니다.

 

예를들어 ON UPDATE CASCADE로 설정했을경우 기준테이블의 참조된 기본키값이 "AAA"에서 "BBB"로 수정된다면 외래키가 설정된 테이블의 외래키값도 "BBB"로 자동으로 수정됩니다.

 

설정방법은 아래 코드 처럼 값을 넣어 줍니다.

ALTER TABLE buyTBL
	DROP FOREIGN KEY FK_userTBL_buyTBL; -- (외래키명) 외래 키 제거

ALTER TABLE buyTBL
	ADD CONSTRAINT FK_userTBL_buyTBL
	FOREIGN KEY (userID)
	REFERENCES userTBL (userID)
	ON UPDATE CASCADE;	-- 기준 테이블의 참조된 기본키값이 변경 시 buyTBL의 userID 값도 함께 변경

 

 

[MariaDB] 전체보기

 

'MariaDB' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

반응형