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

帮忙看看那里出问题了,再帮忙改一下,谢谢。DROPTRIGGERdata_del;DELIMITER//CREATETRIGGERdata_delAFTERINSERTO... 帮忙看看那里出问题了,再帮忙改一下,谢谢。
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;
//
展开
 我来答
wangzhiqing999
2011-06-28 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3363万
展开全部
感觉上是无解.
原因:
MySQL 中 FOR EACH ROW 的触发器(也就是 行级触发器,每一行触发一次的)
触发器代码中,不能 SELECT /UPDATE/DELETE 被触发的表。

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

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

你这个情况,
Oracle 可以用 语句级的触发器,来实现。
SQL Server 是没有行级,只有语句级的触发器,也能实现。
但是 MySQL 好像没有 语句级的触发器。 所以你这个功能, 可能用触发器实现不了。
情龙人
2011-06-28 · 超过28用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:76.6万
展开全部
这个问题,很大。不能用触发器去做。
因为你可能删除掉你触发的这条数据,最后写个Job,定时去扫描吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
千禅经9414
2012-02-24 · TA获得超过6.8万个赞
知道大有可为答主
回答量:3.6万
采纳率:0%
帮助的人:4557万
展开全部
可以通过事件event定时删除
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式