sql >> データベース >  >> RDS >> Mysql

parentIDとchildIDが同じテーブルにある場合にカスケードを削除するにはどうすればよいですか?

    ON DELETE CASCASDEを使用して、子行からその親への外部キーを設定していることを確認する必要があります。 外部キーに設定されたオプション。これは、個別のテーブルの参照と同様に、自己参照テーブルでも機能します。ツリーを削除するには、親ノードを削除するだけです。すべての子行がまとめて削除されます。

    例えば与えられた:

    CREATE TABLE MyTable
    (
      ID INT NOT NULL PRIMARY KEY,
      ParentID INT  NULL,
      CONSTRAINT FK_MT_Parent FOREIGN KEY (ParentID) REFERENCES MyTable(ID) ON DELETE CASCADE
    );
    
    -- And inserting two trees of data:
    -- 1-2-3
    --   └-4
    -- 10 - 11
    INSERT INTO MyTable(ID,ParentID) VALUES
        (1,null), (2,1), (3,2), (4,2),
        (10,null), (11,10);
    

    ルートノードを削除するだけで、最初のツリー全体を削除できます:

    DELETE FROM MYTable WHERE ID = 1;
    

    同じもののSqlFiddle

    ただし、ドキュメント> CASCADEの深さに制限があること 削除:



    1. データベース管理のためのACIDモデルを理解する

    2. SQLServer2008で最後に挿入されたIDを取得する

    3. Windowsコンピュータでmy.cnfが見つかりません

    4. デフォルトのMySQLデータベース名