2013-06-12 10 views
1

내 DB (InnoDB)에 문제가 있습니다. 저는 두 개의 테이블을 가지고 있습니다 :MySQL의 "ON UPDATE"제약 조건이 내 행을 삭제합니다.

table1{ 
    id1 INT.. 
    .. 
    PRIMARY KEY (id1) 
    } 

    table2{ 
    fk INT.. 
    ... 
    FOREIGN KEY (FK) REFERENCES table1(id1) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE 
    } 

이제 ... 테이블 1에 레코드를 변경하면 테이블 2의 레코드가 삭제됩니다! 나는이 행동을 원하지 않는다. 이걸 어떻게 바꿀 수 있니?

나는 "InnoDB는 외래 키 제약 조건으로 비 고유 키를 참조 할 수있다"고 읽었습니다. 내 열쇠는 독특합니다. 이걸 어떻게 바꿀 수 있니?

감사합니다.

답변

0

table2의 외래 키가 ON DELETE CASCADE 속성으로 정의되어 있기 때문에 예상되는 동작입니다. table1의 삭제는 table2에 계단식으로 연결됩니다.

change this definitionON DELETE SET NULL을 입력 할 수 있습니다.

+0

예. 알아,하지만 table1에서 업데이트 할 때 행이 삭제됩니다. 나는 이유를 모른다. –

+0

아, 너무 빨리 읽어 죄송합니다. 그러면 뭔가 다른 일이있을 것입니다 ('table1'에 대한 트리거?). 여기서 일어나는 일은 외래 키와 관련 될 수 없다. ('REPLACE'는 실제로'DELETE'와'INSERT'가 뒤섞이기 때문에'UPDATE' 대신에'REPLACE'를 사용하여''table1''에서 레코드를 변경하지 않는 한) . – RandomSeed

+0

예. 방아쇠. 이 트리거는 숫자를 다른 테이블로 변경합니다. 아니요 ... 업데이트를 사용합니다 –