zoukankan      html  css  js  c++  java
  • 第二十篇:记下第一个mysql触发器

    项目背景:
    给一个服务限制访问次数,当用户访问这个服务的次数达到这个值的时候,关闭他的访问权限
    首先访问信息存在一张表中,记录用户的ip:visitor_ip,服务的id:service_id,访问次数:total_count
    另一张表存的是该服务的权限信息, service_id关联,limit_visits为阈值
    第三张表存放 service_id,visitor_ip;有这个匹配对的该ip下的用户无法访问这个id的服务

    首先想到用定时任务,不断轮询去统计 ,
    问题是:用户访问服务的行为是随机的,访问信息表的变化也是随机的,这样去轮询做统计做判断执行操作,增加访问数据库的压力不说,每次轮询完了要在程序里做各种循环判断;第二个问题是,定时任务的时间间隔,时间短了数据库表查询和程序判断后执行的动作恐怕来不及,时间长的话,某些用户可能就在这个间隔里突然疯狂访问,没来得及下次任务开始,已经达到阈值

    触发器是个好东西
    设计如下,mysql的版本
    图片
    好了,踩了一些坑,最后我要说,请用Beaytiful SQL先美化一下格式,排错的时候,直接定位到某一行去找错误.........

    触发器的贴几条现成的:
    1. 自动执行。触发器在对表的数据作了任何修改(比如手工输入或者应用程序的操作)之后立即被激活。
    2. 级联更新。触发器可以通过数据库中的相关表进行层叠更改,这比直接把代码写在前台的做法更安全合理。
    3. 强化约束。触发器可以引用其它表中的列,能够实现比CHECK约束更为复杂的约束。
    4. 跟踪变化。触发器可以阻止数据库中未经许可的指定更新和变化。
    5. 强制业务逻辑。触发器可用于执行管理任务,并强制影响数据库的复杂业务规则。 


    所以,以后触发器,可以多多的尝试在项目中使用,以减少某些繁琐的业务 
  • 相关阅读:
    过往总结
    查找光标处的标识符
    【转】Linux 内核开发 Eclipse内核开发环境搭建
    【转】Writing linux kernel code in Eclipse
    【转】 Linux内核升级指南
    [转]Ubuntu 11.04 安装后要做的20件事情
    【转】vim 替换操作大全
    【转】移动硬盘安装ubuntu
    重置 Winsock 目录
    【转】让Firefox像vim一样操作
  • 原文地址:https://www.cnblogs.com/yb38156/p/9821978.html
Copyright © 2011-2022 走看看