In mysql can I return deleted rows after a deletion?

前端 未结 2 1059
不知归路
不知归路 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: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.

提交回复
热议问题