• 第二十篇:记下第一个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. 强制业务逻辑。触发器可用于执行管理任务,并强制影响数据库的复杂业务规则。 


    所以,以后触发器,可以多多的尝试在项目中使用,以减少某些繁琐的业务 
  • 相关阅读:
    Spring Boot 2.x基础教程:加密配置中的敏感信息
    Spring Boot 2.x基础教程:Swagger静态文档的生成
    Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档
    线性代数相关
    CF1738 E. Balance Addicts
    初赛
    排列&答案最优
    2022牛客OI赛前集训营提高组(第一场)
    10/3 模拟赛 | 牛客 2020 tg1
    Codeforces Round #821 (Div. 2) D E
  • 原文地址:https://www.cnblogs.com/yb38156/p/9821978.html
Copyright © 2020-2023  润新知