RedPlus 개인 블로그

시삽: 레드플러스 님 
게시판 이동:
 제목 : SQL Server On Delete Cascade : 외래키 제약 조건 설정시 Delete 구문 처리시 주의 사항
글번호: 43
작성자: Administrator ( 레드플러스 / redplus@live.com )
작성일: 2008/11/08 오후 12:09:00 (2008/11/08 오후 12:09:00 수정)
조회수: 3245

--[!] 부모 테이블과 자식 테이블이 Foreign Key 제약 조건으로 설정되었을 때에
--    부모 테이블 삭제시 자식 테이블이 참고하고 있을 시에는 부모 테이블의 레코드를 삭제할 수 없다.

--[0] tempdb에서 연습하기
Use tempdb
Go

--[1] 카테고리 샘플 테이블 생성
Create Table Categories
(
 CategoryID Int Identity(1, 1) Primary Key,
 CategoryName VarChar(25)
)
Go

--[2] 카테고리 테이블에 샘플 데이터 2개 등록
Insert Into Categories Values('데스크톱')
Go
Insert Into Categories Values('노트북')
Go
Insert Into Categories Values('가전')
Go

--[3] 상품 테이블 생성
Create Table Products
(
 ProductID Int Identity(1, 1) Primary Key,
 ProductName VarChar(25),
 CategoryID Int Not Null
)

--[4] 기본값으로 외래키 지정
Alter Table dbo.Products
Add Foreign Key(CategoryID) References Categories(CategoryID)
Go

--[5] 샘플 상품 데이터 등록
Insert Into Products Values ('좋은컴퓨터', 1)
Go
Insert Into Products Values ('좋은노트북', 2)
Go

--[6] 만약 1번 카테고리인 데스크톱을 삭제하려면, 좋은컴퓨터가 참조하고 있으므로 삭제 불가 : 에러 발생
Delete Categories Where CategoryID = 1
Go

--[7] 외래키 설정시 On Delete Cascade 옵션을 두면, 부모키(Primary Key) 삭제시 참조되는 모든 자식 테이블의 레코드도 같이 삭제
Alter Table dbo.Products
Add Foreign Key(CategoryID) References Categories(CategoryID) On Delete Cascade
Go

--[8] 1번 카테고리 삭제 시도 : 삭제됨
Delete Categories Where CategoryID = 1
Go

--[9] 위 구문 수행 결과 1번 카테고리 및 1번 카테고리를 참고하고 있는 Products 테이블의 '좋은컴퓨터' 항목도 같이 삭제됨
Select * From Products
Go

--[10] 만약, 자식 테이블에서 참조하고 있지 않은 '가전' 레코드는 바로 삭제가 가능하다.
Delete Categories Where CategoryID = 3
Go

 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트


관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 CSS 기반의 Div 태그 사용 Layout 샘플 제공 사이트 URL 모음 - Administrator 2008-11-23 3311
현재글 SQL Server On Delete Cascade : 외래키 제약 조건 설정시 De... - Administrator 2008-11-08 3245
다음글 LG CNS 본사 프로젝트에서... - Administrator 2008-11-07 3198
관련 페이지 리스트
numtitlenamedateview
388 C 언어에서 값 전달과 참조 전달(Call By Value and Call By Re... Administrator 2023-03-09 3564
387 병합 알고리즘 순서도 2022-10-22 5100
386 C 언어 강의: scanf를 엔터키를 기준으로 여러 행으로 값을 입력 받기 Administrator 2022-01-09 4407
385 C 언어: scanf 사용해서 표준 입력인 콘솔로부터 나이를 정수로 입력 받아 출력 Administrator 2022-01-07 3218
384 Java 코드 샘플 - Function 인터페이스로 람다 식 만들기 Administrator 2022-01-04 3114
383 C# 코드 샘플 - 널 조건부 연산자 사용하기 Administrator 2022-01-02 3155
382 C# 코드 샘플 - 널 병합 연산자와 default 키워드 Administrator 2022-01-02 3065
381 C# 코드 샘플 - 널 병합 연산자로 문자열 변수의 NULL 값 확인하기 Administrator 2022-01-02 2979
380 C# 강의 - 14세 미만 체크 메서드 구현 Administrator 2022-01-01 3031
379 C 언어 천 단위 콤마 찍기 thousands_separator.c Administrator 2021-12-30 4164
378 for 문 순서도 - for 문(for loop) 순서도(flowchart) Administrator 2021-12-28 6879
377 C 언어 코드 샘플 - 전처리기 - 조건부 컴파일 Administrator 2021-12-27 3056
376 C 언어 코드 샘플 - 전처리기 - 매크로 함수 Administrator 2021-12-27 3023
375 http-server 설치하기 - 로컬 루프백 주소로 웹페이지 실행 2021-12-27 3027
374 C 언어 코드 샘플 - N명의 학생의 점수를 입력받아 1차원 배열에 저장 후 총점 구... Administrator 2021-12-27 3080
373 Java 코드 샘플 - 두 수의 합을 구하는 함수 Administrator 2021-12-26 2958
372 C 언어 코드 샘플 - 두 수의 합을 구하는 함수 Administrator 2021-12-26 2999
371 C# 교과서 강좌 - LINQ - Select 확장 메서드에 익명 형식 사용하기 Administrator 2021-12-26 3117
370 C# 교과서 강의 - LINQ - Select 확장 메서드를 사용하여 새로운 형태로 ... Administrator 2021-12-26 3033
369 C 언어 코드 샘플 - static-shared - 정적(공유) 변수 사용하기 Administrator 2021-12-26 3052
 
 
 
손님 사용자 Anonymous (손님)
로그인 Home