SQL 10-6. 제약조건 위반
관련링크
본문
① 행 갱신 : 무결성 제약 조건 오류
오라클 디비 예제 :
UPDATE employees
SET department _id = 55
WHERE employee_id = 110;
employees
ERROR at line 1 :
ORA-02291 : integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found
☞설명) 무결성 제약 조건 오류
부서 번호 55가 존재 하지 않는다.
무결성 제약 조건의 영향을 받는 값을 포함하는 레코드를 갱신하면 오류가 반환된다.
예제에서 부모 테이블 DEPARTMENTS에 부서 번호55가 없으므로 parent key 위반(ORA-02291)이 발생한다.
참고 : 무결성 제약 조건은 데이터가 미리 정의된 규칙을 따르도록 보장해 준다.
② 행 삭제 : 무결성 제약 조건 오류
예제) 행 삭제 : 무결성 제약 조건 오류
오라클 디비 예제 :
publishers WHERE pub_id = 60;
-----------------------------------------------------------------
ERROR at line 1 :
ORA-02292 : integrity constraint (HR.EMP_DEPT_FK) violated - child record found
-------------------------------------------------------------------
☞설명)
다른 테이블에서 외래 키로 사용되는 기본 키를 포함 하는 행은 삭제할 수 없다.
무결성 제약 조건의 영향을 받는 값을 포함하는 레코드를 삭제하면 오류가 반환된다.
예제의 경우 DEPARTMENTS테이블에서 부서 번호60을 삭제하려고 시도하면 부서번호가 EMPOYEES테이블에서 외래 키
로 사용되므로 오류가 발생한다.
삭제하려는 부모레코드가 자식 레코드를 포함하는 경우 child record found 위반(ORA-02292)이 발생한다.
다음 명령문은 부서70에 사원이 없으므로 제대로 동작한다.
DELETE FROM departments
WHERE department_id = 70;
MSSQL 디비 예제 :
SELECT emp_id, lname, job_lvl * 12 annsal,hire_date
into dept80
MSSQL 디비 예제 :
DELETE FROM publishers
WHERE pub_id = 0877
----------------------------------------------------------------------
메시지 547, 수준 16, 상태 0, 줄 1
DELETE 문이 REFERENCE 제약 조건 "FK__titles__pub_id__07020F21"과(와) 충돌했습니다.
데이터베이스 "pubs", 테이블 "dbo.titles", column 'pub_id'에서 충돌이 발생했습니다.
문이 종료되었습니다.
----------------------------------------------------------------------
**다른 테이블에서 참조하고 있지 않은 행을 삭제 할 경우에는 무결성 제약조건 오류가 발생하지 않는다.**
댓글목록
최고관리자님의 댓글
최고관리자 작성일에러가 생겼을때 어떻게 콜백 메세지를 쿼리 폼에서 받을 수 있는가?