MySQL通过触发器解决数据库中表的行数限制详解及实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL通过触发器解决数据库中表的行数限制详解及实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2453字,纯文字阅读大概需要4分钟。
内容图文
![MySQL通过触发器解决数据库中表的行数限制详解及实例](/upload/InfoBanner/zyjiaocheng/583/97d0ac6439b2442e81d7db9ab8a73d9f.jpg)
MySQL通过触发器解决数据库中表的行数限制详解及实例
最近项目一个需求是对操作日志的数量限制为10万条,超过十万条便删除最旧的那一条,保存数据库中日志数量不超过10万。
当时我的第一想法是通过触发器来做,便在数据库中执行了如下的SQL:
delimiter $ create trigger limitLog before insert on OperationLog for each row begin if (select count(*) from OperationLog) > 100000 then delete from OperationLog limit 1; end if; end $ delimiter ;
看起来似乎没什么问题,对于insert前执行判断,如果数量超过100000就执行删除。但在真正数据库超过100000条,也就是开始执行IF语句的时候就出问题,MySQL报错:
ERROR 1442 (HY000): Can't update table 'OperationLog' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
查阅资料才知道,MySQL为了防止触发器递归死循环的执行,不允许在某张表的触发器中直接对该表进行DML(SELECT,DELETE,UPDATE,INSERT)操作,当然可以对其他表进行这样操作。
触发器限制的是执行对该表的DML操作。触发器可以在你的执行前后来修改要执行的这一行数据,通过set关键字。
delimiter $ create trigger setLog before insert on OperationLog for each row begin set NEW.action = 'test'; end $ delimiter ;
上述语句表示在insert OpetationLog表的之前,更新insert这条数据的action字段值为test,NEW就表示新添加的这条字段,同样的OLD就表示delete时的字段。而在update的时候NEW以及OLD同时都可以使用。
临时触发器
刚刚谈到的触发器(Triggers)是基于某个表所产生的事件触发的,而临时触发器也称为事件调度器是基于特定时间周期触发来执行某些任务。MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精 确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
在使用这个功能之前必须确保event_scheduler已开启,可执行
GLOBAL event_scheduler = 1;
或者
SET GLOBAL event_scheduler = ON;
要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';
或
SELECT @@event_scheduler;
或
SHOW PROCESSLIST;
而对于本文一开始提到的问题,使用这种机制则可完美解决:
delimiter $ CREATE EVENT limitLog ON SCHEDULE EVERY 1 SECOND DO IF (select count(*) from OperationLog) > 100000 then delete from OperationLog limit 1;END IF $ delimiter ;
亲测有效
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
- MySQL触发器使用详解
- mysql触发器(Trigger)简明总结和使用实例
- mysql 触发器实现两个表的数据同步
- MYSQL设置触发器权限问题的解决方法
- MySQL笔记之触发器的应用
- Mysql中的触发器简单介绍及使用案例
- MySQL 在触发器里中断记录的插入或更新?
- 用mysql触发器自动更新memcache的实现代码
内容总结
以上是互联网集市为您收集整理的MySQL通过触发器解决数据库中表的行数限制详解及实例全部内容,希望文章能够帮你解决MySQL通过触发器解决数据库中表的行数限制详解及实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。