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;
// 展开
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;
// 展开
3个回答
展开全部
感觉上是无解.
原因:
MySQL 中 FOR EACH ROW 的触发器(也就是 行级触发器,每一行触发一次的)
触发器代码中,不能 SELECT /UPDATE/DELETE 被触发的表。
你的触发器是 AFTER INSERT ON `datapoints`
那么,在触发器的代码里面,
SELECT COUNT(`ID`) FROM datapoints
与
DELETE FROM datapoints
应该都没法执行了。
你这个情况,
Oracle 可以用 语句级的触发器,来实现。
SQL Server 是没有行级,只有语句级的触发器,也能实现。
但是 MySQL 好像没有 语句级的触发器。 所以你这个功能, 可能用触发器实现不了。
原因:
MySQL 中 FOR EACH ROW 的触发器(也就是 行级触发器,每一行触发一次的)
触发器代码中,不能 SELECT /UPDATE/DELETE 被触发的表。
你的触发器是 AFTER INSERT ON `datapoints`
那么,在触发器的代码里面,
SELECT COUNT(`ID`) FROM datapoints
与
DELETE FROM datapoints
应该都没法执行了。
你这个情况,
Oracle 可以用 语句级的触发器,来实现。
SQL Server 是没有行级,只有语句级的触发器,也能实现。
但是 MySQL 好像没有 语句级的触发器。 所以你这个功能, 可能用触发器实现不了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询