database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29282 게시물 읽기
No. 29282
Foreign key update cascade의 모호성?
작성자
강동화(somaggio)
작성일
2009-09-08 00:01
조회수
6,166

foreign key를 사용하여 두개의 테이블 값을 변경시키려고 하는데 아주 이상한 현상이 발견되었습니다.

도대체 원리를 이해할 수가 없는데, 누구 아시는 분 계시면 부탁드려요.


parent_table

 - parent_id  char(36)


child_table

- parent_point_id char(36)


parent_table.pareint_id를 정수형으로 바꿔서 child_table.parent_point_id 값을 자동 update되게 하려는게 목적입니다.


제가 사용한 대충 논리는 다음과 같습니다.

1. 임시의 sub_parent_table을 parent_table과 동일하게 만들고, sub_parent_table에 id_temp를 auto_increment로 만듭니다.

2  parent_table의 값을 select하여 바로 sub_parent_table에 insert합니다. id_temp가 자동으로 결정됩니다.

3 child_table.parent_point_id를 sub_parent_table에 외래어로 지정합니다. on update cascade로요.

4 sub_parent_table.id_temp의 값을 id 의 값으로 update 시킵니다. 이때 외래어키 규칙에 따라 3의 값이 자동 변경됩니다.


그런데 아주 희한한 경우가 발생했습니다.

예를 들어 

parent_table.parent_id = 23

parent_table.parent_id = 25

의 값이 이미 존재합니다.

타입이 문자형임에도 여러가지 이유로 인한 실수로 이런값들이 들어있더군요.


그 후 우연히도 parent_table.parent_id = 23이 새로운 25값을 할당받았고,

parent_table.parent_id = 25 값이 30이란 값을 할당받았습니다.


이때 child_table.parent_point_id = 23 이었던 놈은 25로 변해야하고,

child_table.parent_point_id = 25 인 넘은 30으로 변해야함이 정상인데,


결과는 child_table.parent_point_id = 30 으로 결정되었습니다.


A=>B and B=>C 이면 A => C라는 유도를 한 것 같은데,

즉 parent_table.parent_id = 23 => 25 => 30 으로 되어 버렸네요.


어떻게 이런 결과가 나올 수 있는지 여러 고수님들의 도움 부탁드리겠습니다.

감사합니다.




이 글에 대한 댓글이 총 1건 있습니다.

아놔, 한참 코드를 째러보던 결과 너무도 바보같은 짓꺼리를...

당연히 외래키에 update cacade붙어두었으니, 처음 23이 25로 바뀌고,

두번째 25가 30으로 바뀔땐, 종속테이블에서 두 개의 rows가 25가 있으니,

이 둘이 한꺼번에 30으로 바뀔밖에...


넘 죄송합니다. 이런 어줍잖은 실수로 글을 올려서..

지우기보담은 저랑 비슷한 고민을 하시는 분이 백만명중 한명일 지라도

도움이 되길 바라며. ㅠㅠ

강동화(somaggio)님이 2009-09-08 20:19에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
29285procedure 한글입력문제 [3]
조원준
2009-09-09
8758
29284질문드립니다 쿼리 where 절 [5]
전종구
2009-09-08
5796
29283서브쿼리를 만들어봐야 겠는데 힘드네요 도와 주세요 [1]
술취한머슴
2009-09-08
5819
29282Foreign key update cascade의 모호성? [1]
강동화
2009-09-08
6166
29281데이터 삭제시 인덱스도 같이 삭제 되나요? [2]
김대청
2009-09-07
5739
29268Database 용량 체크 방법 [1]
김지숙
2009-09-04
8045
29267mysql 관련 질문입니다. [3]
박혜성
2009-09-04
6054
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다