In mysql can I return deleted rows after a deletion?

前端 未结 2 1041
不知归路
不知归路 2020-12-21 04:49

How to return deleted records of following query in mysql?

DELETE t1
FROM t1
LEFT JOIN t2 on (t1.t2_id = t2.id)
WHERE t2.id IS NULL OR t2.is_valid = false


        
相关标签:
2条回答
  • 2020-12-21 05:30

    try

    DELETE t1 OUTPUT DELETED.*
    FROM t1
    LEFT JOIN t2 on (t1.t2_id = t2.id)
    WHERE t2.id IS NULL OR t2.is_valid = false
    
    0 讨论(0)
  • 2020-12-21 05:51

    MySQL doesn't have the equivalent of the output or returning clauses provided by other databases. Your best bet is a temporary table:

    CREATE TABLE TheDeletedIds as
        SELECT t1.id
        FROM t1 LEFT JOIN
             t2 
             ON t1.t2_id = t2.id
        WHERE t2.id IS NULL OR t2.is_valid = false;
    
    DELETE t1
        FROM t1
        WHERE t1.id IN (SELECT id FROM TheDeletedIds);
    

    Then the table you just created has the ids you want.

    Note: It is important to use the newly-created table for the deletion. Otherwise, another thread/process could change the data between the time you capture the ids and the time you delete them.

    0 讨论(0)
提交回复
热议问题