본문 바로가기
DataBase/MsSql

MSSQL FOREIGN KEY 제약 조건 추가,삭제 사용법 및 설명

by 아우럼 2024. 3. 11.
반응형

관계형 데이터베이스에서 중요한 개념인 외래키에 관해서 설명하고, MSSQL 이용하여 foreign Key 테이블에 생성하는 방법에 대해서 실습하려고 합니다.

FOREIGN KEY의 개념

  • 외래키(Foreign Key)는 관계형 데이터베이스에서 매우 중요한 개념입니다.
  • Foreign Key는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 이야기합니다.
  • 쉽게 이야기하면, 외래키는 테이블 간의 관계를 연결해 주는 고리 역할을 합니다.
  • 실무적인 예를 들어, 모두가 한 번씩은 사용해 본 경험이 있는 게시판에 글 제목하고 작성한 id를 확인할 수 있는데
  • 이때 게시판의 id는 유저정보 테이블의 id와 일치해야 합니다.
  • 결론적으로 게시판의 id와 사용자 테이블의 id는 서로 연결 관계로 생각하면 쉽게 이해가 됩니다.

FOREIGN KEY 추가 방법

테이블 생성 시 FOREIGN KEY 칼럼에 추가.

  • FOREIGN KEY 예시 코드입니다.
CREATE TABLE [테이블이름] (
 [column1] [dataType],
 [column2] [dataType],
 [column3] [dataType] FOREIGN KEY REFERENCES [참조 테이블명] ([참조 column 이름]),
 [column4] [dataType],
...
);
  • FOREIGN KEY 실습 코드입니다.
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForFk;
CREATE TABLE UserInfoForFk (
userId		varchar(20) PRIMARY KEY,
userNames	varchar(50),
userHp		int,
userAddress nvarchar(200)
);

DROP TABLE IF EXISTS boardForFk;
CREATE TABLE boardForFk (
boardId		int,
boardTitle	nvarchar(100),
writeId		varchar(20) FOREIGN KEY REFERENCES UserInfoForFk (userId),
writeDt     datetime
);

 

테이블 생성시 FOREIGN KEY(외래키) 컬럼에 추가 예시.

테이블 생성 시 FOREIGN KEY 이름 지정해서 추가.

  • FOREIGN KEY sytax입니다.
CREATE TABLE [테이블이름] (
 [column1] [dataType] NOT NULL,
 [column2] [dataType],
 [column3] [dataType],
 [column4] [dataType],   
CONSTRAINT [FOREIGN KEY명] FOREIGN KEY ( column3)
REFERENCES [참조 테이블명] ([참조 column 이름])
);
  • FOREIGN KEY 소스 코드입니다.
USE sampleDB;
DROP TABLE IF EXISTS UserInfoForFk;
CREATE TABLE UserInfoForFk (
userId		varchar(20) PRIMARY KEY,
userNames	varchar(50),
userHp		int,
userAddress nvarchar(200)
);

DROP TABLE IF EXISTS boardForFk;
CREATE TABLE boardForFk (
boardId		int,
boardTitle	nvarchar(100),
writeId		varchar(20),
writeDt     datetime,
CONSTRAINT Fk_UserInfoForFk  FOREIGN KEY(writeId)  REFERENCES UserInfoForFk (userId)
);

 

테이블 생성시 FOREIGN KEY(외래키)이름 지정해서 추가하는 방법.

테이블 생성 후 FOREIGN KEY 추가.

  • 예시 sytax입니다.
 ALTER TABLE [테이블명] ADD CONSTRAINT [FOREIGN KEY명] 
FOREIGN KEY ([ column 명]) REFERENCES [참조 테이블명] ([참조 column 명]) ;

 

  • FOREIGN KEY 소스 코드입니다.
  ALTER TABLE boardForFk  ADD CONSTRAINT Fk_UserInfoForFk01
	FOREIGN KEY (writeId) REFERENCES UserInfoForFk (userId)

테이블 생성후 FOREIGN KEY 입력.

 

FOREIGN KEY 있는 상태에서 Data 입력 및 삭제

Table에 FOREIGN KEY Insert 순서.

  • parent table 입력, child table 입력 순으로 입력하면 에러 발생하지 않습니다.
  • 유저테이블 입력 후 게시판에 입력가능 합니다.
  • 실습코드입니다.
--  UserInfoForFk id 입력하지 않고 boardForFk(게시판) 먼저 입력한경우.
INSERT INTO DBO.boardForFk(boardId,boardTitle,writeId,writeDt)
values ('1',N'아우럼가이드','aurumguide',getdate())
go

--  parent table 입력 , child table 입력 순으로 입력하면 에러 발생하지 않음.
INSERT INTO DBO.UserInfoForFk(userId,userNames,userHp,userAddress)
values ('aurumguide',N'아우럼가이드',0101191140,'seoul')
go

INSERT INTO DBO.boardForFk(boardId,boardTitle,writeId,writeDt)
values ('1',N'아우럼가이드','aurumguide',getdate())
go

 

  • 에러에 대한 화면입니다.

parent table 입력 , child table 입력 순으로 입력 합니다.

 

Table에 FOREIGN KEY Delete 순서.

  • 입력 순서 반대로 child table 삭제 후 parent table 삭제해야 합니다.
  • 게시판 data 삭제 후 유저 테이블 삭제가능 합니다.
  • 소스 및 실행 화면 예제입니다. 꼭 실습해 보세요.
 -- parent  table 먼저 delete 한경우 
delete from DBO.UserInfoForFk  where userId ='aurumguide'
 
 -- child table 삭제후 parent table 삭제
 delete from DBO.boardForFk  where writeId ='aurumguide';
 go
 delete from DBO.UserInfoForFk  where userId ='aurumguide';

 

  • 실습 따라 해 보세요.

child table 삭제 후 parent table 삭제 해야 합니다.

FOREIGN KEY 삭제

외래키 삭제 방법.

  • 예시 코드는 ALTER TABLE [테이블명] DROP CONSTRAINT [FOREIGN KEY명]입니다.
  • 소스 코드입니다.
-- Fk 삭제
ALTER TABLE DBO.boardForFk DROP CONSTRAINT Fk_UserInfoForFk01

 

 

FOREIGN KEY 제약조건

테이블에 FOREIGN KEY 제약조건 확인.

  • 예시코드 SP_HELPCONSTRAINT [테이블명]입니다.
  • 실행 화면입니다.

 

명령어로 FOREIGN KEY 제약 조건 확인 방법 입니다.

FOREIGN KEY 마무리하며

  • FOREIGN KEY는 자식 칼럼하고 부모 칼럼의 자료형을 동일하게 설계해야 합니다.
  • 자식 칼럼에서 부모 칼럼을 참조하는 경우 부모 칼럼은 unique 칼럼으로 설계합니다.
  • 부모칼럼은 자식칼럼에서 참조할 경우 삭제가 불가합니다.
  • FOREIGN KEY을 사용하는 경우 코드형을 추천합니다.
  • 관계형 database에서는 FOREIGN KEY는 data 무결성을 유지하기 위해서 매우 중요한 개념입니다.

 

반응형