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

MySQLでDELETECASCADEをシミュレートしますか?

    データベースのコピーを作成し、after deleteにトリガーを設定できます

    DELIMITER $$
    
    CREATE TRIGGER ad_table1_each AFTER DELETE ON table1 FOR EACH ROW
    BEGIN
      INSERT INTO log VALUES (null                 /*autoinc id*/
            , 'table1'                             /*tablename*/
            , old.id                               /*tableid*/
            , concat_ws(',',old.field1,old.field2  /*CSV's of fields*/
            , NOW()                                /*timestamp*/
            , 'delete');                           /*what action*/
    
    
      REPLACE INTO restore_table1 VALUES (old.id,
            , old.field1
            , old.field2
            , ... );
    
    END $$
    
    DELIMITER ;
    

    ログテーブルは、次のフィールドを持つ単なるテーブルです。

    id            integer autoincrement primary key
    tablename     varchar(45)
    table_id      integer
    fields        varchar(6000)
    delete_time   timestamp
    action        enum('insert','update','delete')
    

    SELECT @last_id:= max(id) FROM logを実行する場合 コピーの削除カスケードの前。
    次に、SELECT * FROM log WHERE id > @last_idを実行できます。
    そして、カスケードで削除されるすべての行を取得します。

    その後、restore_table1を使用して、コピーデータベースのカスケードで削除された行を再作成できます。



    1. mysqlワークベンチの列アイコンはどういう意味ですか

    2. EntityFrameworkクエリでの信じられないほどの重複

    3. プログラムでSQLServerCEデータベースファイルを作成する

    4. レコードを挿入、更新、または削除するすべてのストアドプロシージャを見つけるにはどうすればよいですか?