项目有一个需求,表中的数据根据某个固定字段只需要保留最新的10条,过期数据可以删掉,同时设置定时删除,根据该需求,建立函数和事件如下:
MySQL 8.0以上:
CREATE DEFINER=`root`@`%` PROCEDURE `DeleteSampledataOpcKep`()
BEGIN
DELETE t1
FROM em_sampledata_opc_kep t1
INNER JOIN (
SELECT
ID,
ROW_NUMBER() OVER(PARTITION BY TagTab ORDER BY DataTime DESC,ID DESC) AS rn
FROM em_sampledata_opc_kep
) t2 ON t1.ID = t2.ID
WHERE t2.rn > 5;
END
MySQL5.7
DELETE t1
FROM your_table t1
WHERE (SELECT COUNT(*) FROM your_table t2
WHERE t2.TagTab = t1.TagTab AND (t2.DateTime>t1.DateTime OR (t2.DateTime=t1.DateTime AND t2.ID>t1.ID))) >= 10;
事件:
CREATE DEFINER=`root`@`%` EVENT `DeleteSampledataOpcKep`
ON SCHEDULE EVERY 10 SECOND
STARTS '2016-08-01 03:31:05' ON COMPLETION NOT PRESERVE ENABLE
DO CALL DeleteSampledataOpcKep


被折叠的 条评论
为什么被折叠?



