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定时删除

如何在mysql中删除触发器mysql中删除触发器
步骤一:查看触发器列表 在MySQL中,您可以使用以下命令查看数据库中所有的触发器:SHOW TRIGGERS;此命令将列出当前目录中所有数据库中的触发器名称、执行时间、触发器事件、触发表以及触发的操作。步骤二:选择要删除的触发器 在执行删除命令之前,请选择要删除的触发器名称。如果您不确定要删除的触发器...

...的触发器,当向学生表student中插入记录时,自动更新班级表class中...
1、首先打开sqlyog并和mysql建立连接。2、在sqlyog软件左侧树形菜单中要到触发器选项。3、在触发器选项上点击右键找到创建触发器选项,或者选择触发器选项按f4也可以弹出创建触发器弹窗。4、想要创建一个名称为trigger的触发器,那么就在弹窗的输入框中输入trigger并点击确定即可。5、想要创建一个biao1中插...

mysql中怎么添加触发器并用print输出一句话
1、需要确定自己的Mysql数据库的版本,因为mysql数据库是从5.0.2版本才开始支持触发器的。2、在电脑的dos命令界面中输入:mysql--version,来获取mysql的版本号。3、采用以视图加代码的方式创建,在数据表中找到要执行删除操作的表,然后右键设计表。4、打开了表的设计页面,可以看到有一个触发器选项卡...

教程MySQL触发器的创建详解mysql中创建触发器
接下来,我们来创建一个 INSERT 触发器,当在 test 表中插入数据时,自动将该表的数据插入到另一个表中。CREATE TRIGGER 代码如下:CREATE TRIGGER `insert_test` AFTER INSERT ON `test`FOR EACH ROW INSERT INTO `test_copy` (`id`, `name`, `age`) VALUES (NEW.`id`, NEW.`name`, NEW...

mysql触发器新增一条内容,就删除一条内容
增加一条学生记录时,会自动检查年龄是否符合范围要求。每当删除一条学生信息时,自动删除其成绩表上的对应记录。触发器是与表有关的数据库对象,指在insert\/updateldelete之前或之后,触发并执行触发器中定义的SQL语句集合。创建两个表,目的是在一个表里删除一条记录,另一个表也删除一条记录。

mysql如何通过触发器将一个表的数据新增一条记录后与另一个表匹配运算...
在表A中插入数据的时候在表B中同时插入:判断如果存在ID相同的则对它进行更新,ID不存在则进行插入假如两个表名字为A和B,在插入表A数据的同时对表B进行操作createtriggernode_insertafterinsertonAforeachrowbeginupdateBsetB.ID=NE

mysql如何用触发器禁止某条记录的删除、修改
mysql用触发器禁止某条记录的删除、修改:delimiter \/\/ CREATE TRIGGER xx_company_agent_update BEFORE UPDATE ON xx_company_agent FOR EACH ROW BEGIN IF OLD.bank_card is not null THEN SET NEW.bank_card = OLD.bank_card,NEW.money= OLD.money,NEW.real_money=OLD.real_money,NEW.bank_...

mysql触发器if判断条件问题
1,创建触发器:t_afterinsert_on_tab1 作用:增加tab1表记录后自动将记录增加到tab2表中 create trigger t_afterinsert_on_tab1 after insert on tab1 for each row begin if new.tab1_id is not null then insert into tab2(tab2_id)values(new.tab1_id);end if;end;2,创建触发器:t...

SQL如何给一个表的日期列设置 如果日期大于某个值就触发报错信息?
SQL自定义函数function,你的需求估计只有function能实现

MySQL如何创建一个触发器,功能是在一张表中insert一条数据,另一张表...
CREATE TRIGGER BeforeInsertTest BEFORE INSERT ON change FOR EACH ROW BEGIN UPDATE message SET dept = new.newdept WHERE mid = new.cid ;END;

相似回答