728x90
SET DEFAULT 란?
DELETE SET DEFAUL : 부모 데이터 삭제시 자식 데이터의 Columm은 기본 값(Default) 으로 Update.
UPDATE SET DEFAUL : 부모 데이터 업데이트시 자식 데이터의 Columm은 기본 값(Default) 으로 Update.
관련 테이블 테이블생성
작업 전 필요한 테이블 및 데이터를 입력한다.
-- 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. SET DEFAULT 옵션 설정
부모 테이블인 Employee 테이블에 EMPID가 S0000인 데이터를 추가한다.
-- dbo.Employee에 데이터 추가
INSERT INTO dbo.Employee(EmpID, EmpName, EngName) VALUES('S0000',N'NULL', 'NULL')
GO
-- EmpID 열에 기본 값 설정
ALTER TABLE dbo.Vacation
ADD CONSTRAINT DF_Vacation_EmpID
DEFAULT 'S0000' FOR EmpID
GO
--데이터 추가시 default 값인 S0000가 입력된다.
INSERT INTO dbo.Vacation VALUES(default,'2012-09-17','2012-09-17',N'휴식이 필요')
-- 기존 FOREIGN KEY 제약 삭제
ALTER TABLE dbo.Vacation
DROP CONSTRAINT FK_Vacation_EmpID
GO
-- FOREIGN KEY 제약 추가(SET DEFAULT)
ALTER TABLE dbo.Vacation
ADD CONSTRAINT FK_Vacation_EmpID
FOREIGN KEY (EmpID) REFERENCES dbo.Employee(EmpID)
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT
GO
-- 직원 정보 삭제
DELETE dbo.Employee
WHERE EmpID = 'S0010'
GO
-- 확인
SELECT * FROM dbo.Vacation
GO
직원 정보 업데이트
직원정보(부모) S0003 -> S0009로 업데이트한다. 자식 테이블인 Vacation의 EMPID S0003은 부모값인 S0003가 사라졌기 때문에 DEFAULT 설정값인 'S0000'으로 변경된다.
update Employee set EmpID='S0009'
WHERE EmpID = 'S0003'
-- 확인
SELECT * FROM dbo.Employee
SELECT * FROM dbo.Vacation
GO
반응형
그리드형
'IT > MSSQL' 카테고리의 다른 글
[MSSQL] Tempdb 래치경합 확인 및 해결방법(PAGELATCH_EX, PAGELATCH_SH) (0) | 2023.03.08 |
---|---|
[MSSQL] 암호 정책 변경방법(OS 암호정책 포함) (0) | 2023.03.08 |
[MSSQL] cascade 옵션(외래키 설정시 자동삭제 및 업데이트) (0) | 2023.03.08 |
[MSSQL] 외래키(FOREIGN KEY) 제약조건 - 생성(추가), 삭제 (0) | 2023.03.08 |
[MSSQL] 체크(CHECK) 제약조건 - 생성(추가), 삭제 (0) | 2023.03.08 |
댓글