본문 바로가기
IT/MSSQL

[MSSQL] cascade 옵션(외래키 설정시 자동삭제 및 업데이트)

by 베베야 2023. 3. 8.
728x90

CASCADE ?

기준 테이블의 데이터가 변경되었을 때 외래 키 테이블도 자동으로 변경

ON UPDATE CASCADE : 기준 테이블의 데이터가 변경되었을 때 외래 키 테이블도 자동으로 변경

ON DELETE CASCADE : 기준 테이블의 데이터가 삭제되었을 때 외래 키 테이블의 데이터들도 자동으로 삭제

 

관련 테이블 테이블생성

작업 필요한 테이블 데이터를 입력한다.

-- dbo.Vacation 테이블 삭제

IF OBJECT_ID('dbo.Vacation', 'U') IS NOT NULL

DROP TABLE dbo.Vacation

GO



-- dbo.Employee 테이블 삭제

IF OBJECT_ID('dbo.Employee', 'U') IS NOT NULL

DROP TABLE dbo.Employee

GO



-- dbo.Employee 테이블 만들기

CREATE TABLE dbo.Employee (

EmpID char(5) PRIMARY KEY,

EmpName nvarchar(10) NOT NULL,

EngName varchar(20) NULL,

)

GO



-- 데이터 추가

INSERT INTO dbo.Employee(EmpID, EmpName, EngName) VALUES('S0001', N'홍길동', 'Gildong')

INSERT INTO dbo.Employee(EmpID, EmpName) VALUES('S0002',N'일지매')

INSERT INTO dbo.Employee(EmpID, EmpName, EngName) VALUES('S0003',N'강우동', 'NULL') 

GO



-- dbo.Employee 테이블 만들기

CREATE TABLE dbo.Vacation (

VacationID int IDENTITY PRIMARY KEY,

EmpID char(5) NOT NULL,

BeginDate date NOT NULL,

EndDate date NOT NULL,

Reason nvarchar(50) DEFAULT N'개인사유',

Duration AS (DATEDIFF(day, BeginDate, EndDate) + 1),

CHECK (EndDate >= BeginDate)

)

GO



-- 데이터 추가

INSERT INTO dbo.Vacation VALUES('S0001','2011-01-12','2011-01-12',N'감기몸살')

INSERT INTO dbo.Vacation VALUES('S0001','2011-03-21','2011-03-21',N'글쎄요')

INSERT INTO dbo.Vacation VALUES('S0002','2012-02-10','2012-02-13',N'두통')

INSERT INTO dbo.Vacation VALUES('S0003','2012-09-17','2012-09-17',N'휴식이 필요')

GO

 

1.CASCADE 옵션 설정

-- FOREIGN KEY 제약 추가(CASCADE)

ALTER TABLE dbo.Vacation

ADD CONSTRAINT FK_Vacation_EmpID

FOREIGN KEY (EmpID) REFERENCES dbo.Employee(EmpID)

ON DELETE CASCADE

ON UPDATE CASCADE

GO

-- 직원 정보 삭제

DELETE dbo.Employee

WHERE EmpID = 'S0003'

GO

-- 직원 정보 변경

UPDATE dbo.Employee

SET EmpID = 'S0010'

WHERE EmpID = 'S0001'

GO

-- 테이블 조회

CASCADE 옵션으로 데이터가 삭제 및 업데이트 되면 자동으로 연관된 테이블의 정보들이 변경되는 것을 볼 수 있다.

SELECT * FROM dbo.Employee

SELECT * FROM dbo.Vacation

GO

반응형
그리드형

댓글