5

次のような外部キーを持つ2つのテーブルを持つh2データベースがあります

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;

つまり、両方のテーブルから削除します(私の知る限りMySqlで機能します)。FOREIGN KEY のため、最初にマスターから削除することはできません。スレーブから削除を開始すると、マスターから削除する行の情報が失われます。ON DELETE CASCADE を使用すると役立ちますが、毎回自動的に発生させたくありません。一時的に許可する必要がありますか?一時テーブルを使用する必要がありますか、それとも最善の解決策は何ですか?

4

1 に答える 1

10

誰も答えませんが、それは実際には些細なことです。

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;
于 2012-07-27T13:52:51.597 に答える