如果您的清除频率较低,请使用临时表来捕获您要操作的用户身份。执行连接所有表的导出(实质上是一个平面表),将旧数据保存到 CSV。然后在导出完成后,执行行删除。确保分别执行每个以确保数据完整性。
CREATE GLOBAL TEMPORARY TABLE OLDUSERS
AS (SELECT USERID FROM USERTABLE) DEFINITION ONLY
ON COMMIT PRESERVE ROWS;
INSERT INTO OLDUSERS
SELECT USERID
FROM USERTABLE
JOIN USERINFOTABLE ON USERTABLE.USERID=USERINFOTABLE.USERID
WHERE USERINFOTABLE.LASTLOGING < '2011-01-01 00:00:00.0';
EXPORT TO filename OF DEL
SELECT USERID, USERNAME, ...
FROM USERTABLE
JOIN USERINFOTABLE ON USERTABLE.USERID=USERINFOTABLE.USERID
WHERE USERID IN (SELECT USERID FROM OLDUSERS);
DELETE FROM USERINFOTABLE WHERE USERID IN
(SELECT USERID FROM OLDUSERS);
DELETE FROM USERTABLE WHERE USERID IN
(SELECT USERID FROM OLDUSERS);
如果您执行此操作的频率要求更高,您可能需要创建一个存储过程,该过程将采用截止日期并执行上述操作。