데이터베이스 기초

고객 표(고객ID, 이름)의 기본 키는 고객ID이며, 주문 표(주문ID, 고객ID)의 고객ID는 고객 표의 고객ID를 참조하는 외래 키로 정의되어 있다. 고객 표에는 고객ID가 'C1'과 'C2'인 행만 있다. 이 상태에서 INSERT INTO 주문 VALUES ('O9', 'C5')를 실행했을 때의 결과로 올바른 것은?

  1. A참조 무결성 제약을 위반하므로 행은 추가되지 않고 오류가 된다
  2. B행이 추가되고, 고객 표에도 고객ID가 'C5'인 행이 자동으로 추가된다
  3. C행은 추가되지만 고객ID 값은 NULL로 바뀐다
정답과 해설 보기

정답: A. 참조 무결성 제약을 위반하므로 행은 추가되지 않고 오류가 된다

외래 키는 다른 표(여기서는 고객 표)의 기본 키 등을 참조하는 열로, 참조 대상에 존재하는 값이나 NULL만 넣을 수 있다는 참조 무결성 제약을 지키게 합니다. 고객 표에 'C5'라는 고객은 없으므로, 존재하지 않는 고객의 주문을 추가하려는 조작은 DBMS에 의해 거부되어 오류가 됩니다. 이로써 어느 고객의 것인지 알 수 없는 주문이 남는 것을 막을 수 있습니다. 반대로 주문이 남아 있는 고객의 행을 고객 표에서 삭제하려는 경우에도 기본 동작(NO ACTION)에서는 거부됩니다. 외래 키 정의에 ON DELETE CASCADE를 붙이면, 고객을 삭제했을 때 그 고객의 주문도 연쇄적으로 삭제되게 할 수 있습니다.

이 분야 연습하기 분야로 돌아가기

데이터베이스 기초의 다른 문제

  1. SQL 문은 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나뉜다. DDL로 분류되는 것은?
  2. 상품 표에 (상품명, 가격)이 (펜, 120), (노트, 250), (지우개, 80), (파일, 300), (자, 150)인 5개 행이 있다. SELECT 상품명 FROM 상품 WHERE 가격 >= 150 ORDER BY 가격 DESC의 결과로 반환되는 행을 순서대로 나열한 것은?
  3. 사원 표의 부서 열에 위의 행부터 차례로 영업, 개발, 영업, 총무, 개발, 영업의 값이 들어 있다(전체 6행). SELECT DISTINCT 부서 FROM 사원의 결과는 몇 행이 되는가?
  4. SQL에서 DELETE FROM 사원을 WHERE 절 없이 실행했을 때의 결과로 올바른 것은?
  5. 시험 표의 점수 열에 80, NULL, 70, 90의 4개 값이 있다(NULL은 미응시를 나타낸다). SELECT AVG(점수) FROM 시험의 결과는?