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 으로 되어 버렸네요.
어떻게 이런 결과가 나올 수 있는지 여러 고수님들의 도움 부탁드리겠습니다.
감사합니다.
|