2012-07-27 6 views
1

나는이외래 키

CREATE TABLE master (masterId INT PRIMARY KEY, slaveId INT); 
CREATE TABLE slave (slaveId INT PRIMARY KEY, something INT, 
    CONSTRAINT fk FOREIGN KEY (slaveId) REFERENCES master(slaveId)); 

DELETE master, slave FROM master m JOIN slave s ON m.slaveId = s.slaveId 
    WHERE something = 43; 

같은 즉, 두 테이블에서 삭제할 필요가 같은 외래 키를 가진 두 개의 테이블이있는 H2 데이터베이스 (이 AFAIK는 MySql에서 작동합니다). 외래 키 때문에 마스터에서 먼저 삭제할 수 없습니다. 슬레이브에서 삭제를 시작하면 마스터에서 삭제할 행에 대한 정보가 손실됩니다. ON DELETE CASCADE를 사용하면 도움이되지만 매번 자동으로 실행되는 것을 원하지는 않습니다. 일시적으로 허용해야합니까? 임시 테이블을 사용해야합니까? 아니면 가장 좋은 솔루션은 무엇입니까?

답변

4

아무도 응답하지,하지만 실제로 사소한 :

SET REFERENTIAL_INTEGRITY FALSE; 
BEGIN TRANSACTION; 
DELETE FROM master WHERE slaveId IN (SELECT slaveId FROM slave WHERE something = 43); 
DELETE FROM slave WHERE something = 43; 
COMMIT; 
SET REFERENTIAL_INTEGRITY TRUE;