mysql中给一个表添加触发器,当表的中记录条数大于300时,按ID排序,自动删除前100条,sql语句如下,大家

帮忙看看那里出问题了,再帮忙改一下,谢谢。
DROP TRIGGER data_del;
DELIMITER//
CREATE TRIGGER data_del AFTER INSERT ON `datapoints` FOR EACH ROW
BEGIN
IF (SELECT COUNT(`ID`) FROM datapoints)>='300' THEN
DELETE FROM datapoints ORDER BY `ID` ASC LIMIT 100;
END IF;
END;
//

感觉上是无解.
原因:
MySQL 中 FOR EACH ROW 的触发器(也就是 行级触发器,每一行触发一次的)
触发器代码中,不能 SELECT /UPDATE/DELETE 被触发的表。

你的触发器是 AFTER INSERT ON `datapoints`
那么,在触发器的代码里面,
SELECT COUNT(`ID`) FROM datapoints

DELETE FROM datapoints
应该都没法执行了。

你这个情况,
Oracle 可以用 语句级的触发器,来实现。
SQL Server 是没有行级,只有语句级的触发器,也能实现。
但是 MySQL 好像没有 语句级的触发器。 所以你这个功能, 可能用触发器实现不了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-28
这个问题,很大。不能用触发器去做。
因为你可能删除掉你触发的这条数据,最后写个Job,定时去扫描吧。
第2个回答  2012-02-24
可以通过事件event定时删除