"MySQL 외래키 옵션 변경"의 두 판 사이의 차이

(새 문서: ;MySQL 외래키 옵션 변경 *MySQL 외래키 생성의 예제를 그대로 활용한다. 분류: MySQL)
 
1번째 줄: 1번째 줄:
;MySQL 외래키 옵션 변경
;MySQL 외래키 옵션 변경
*[[MySQL 외래키 생성]]의 예제를 그대로 활용한다.
*[[MySQL 외래키 생성]]의 예제를 그대로 활용한다.
==변경 제한==
기존 예제에서는 별도의 옵션을 주지 않았으므로 다음과 같이 기본값이 적용되어 있다.
*ON DELETE RESTRICT - 삭제시 제약
*ON UPDATE RESTRICT - 갱신시 제약
참조되고 있는 값을 삭제 또는 변경하려고 하면, 자료의 정합성이 깨지게 되므로 다음과 같은 오류가 발생된다.
<source lang='text'>
#1451 - Cannot delete or update a parent row:
a foreign key constraint fails (`test`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dept_no`) REFERENCES `dept` (`dept_no`))
</source>
==변경 자동처리==
위처럼 오류를 내보내는 대신, 참조하고 있는 곳을 찾아가서 자동으로 변경 또는 삭제를 할 수 있도록 해보자.
ALTER TABLE  `emp` DROP FOREIGN KEY  `emp_ibfk_1` ;
ALTER TABLE  `emp` ADD FOREIGN KEY (  `dept_no` ) REFERENCES  `test`.`dept` (
`dept_no`
) ON DELETE CASCADE ON UPDATE RESTRICT ;


[[분류: MySQL]]
[[분류: MySQL]]

2012년 6월 3일 (일) 18:47 판

MySQL 외래키 옵션 변경

1 변경 제한

기존 예제에서는 별도의 옵션을 주지 않았으므로 다음과 같이 기본값이 적용되어 있다.

  • ON DELETE RESTRICT - 삭제시 제약
  • ON UPDATE RESTRICT - 갱신시 제약

참조되고 있는 값을 삭제 또는 변경하려고 하면, 자료의 정합성이 깨지게 되므로 다음과 같은 오류가 발생된다.

#1451 - Cannot delete or update a parent row:
a foreign key constraint fails (`test`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dept_no`) REFERENCES `dept` (`dept_no`))

2 변경 자동처리

위처럼 오류를 내보내는 대신, 참조하고 있는 곳을 찾아가서 자동으로 변경 또는 삭제를 할 수 있도록 해보자.

ALTER TABLE `emp` DROP FOREIGN KEY `emp_ibfk_1` ; ALTER TABLE `emp` ADD FOREIGN KEY ( `dept_no` ) REFERENCES `test`.`dept` ( `dept_no` ) ON DELETE CASCADE ON UPDATE RESTRICT ;

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}