Mysql 触发器

Mysql触发器

1、1 触发器定义

​ 触发器是由事件来触发某个操作, 事件包括 insert update delete事件,

优势:

  1. 保证数据完整性。
  2. 触发器可以帮助记录操作日志
  3. 触发器可以用在操作数据前,对数据进行合法性检测

劣势:

  1. 可读性差。由于触发器是由事件驱动,不受应用层控制。对系统维护不友好
  2. 相关数据表结构的变更,有可能会导致触发器错误。

1、2 触发器使用

  • 创建触发器
触发器创建语法
CREATE TRIGGER name
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
触发执行的语句块

 #错误程序 固定格式
SIGNAL SQLSTATE "错误码" SET MESSAGE_TEXT = '错误信息'

举例
DELIMITER //
CREATE TRIGGER trigger_insert_live
AFTER INSERT ON nlsg_live
FOR EACH ROW
BEGIN
    # 自定义错误流程判断
    IF NEW.id > 10
        THEN SIGNAL SQLSTATE "HY001" SET MESSAGE_TEXT = 'error id > 10'; #自定义校验
    END IF;
    INSERT INTO nlsg_live_info(live_pid) VALUE(NEW.id);  #NEW 为当前insert 数据对象
END //
DELIMITER ;

说明:
– BEFORE|AFTER 表示事件触发时间。BEFORE在事件之前触发 AFTER在事件之后触发。
– 表名 :表示触发器监控对象。
– {INSERT|UPDATE|DELETE} : 表示触发事件。
– 语句块 : 可以是单条 也可以是由BEGIN…END 结构组合的复合语句。
+ 自定义错误程序: SIGNAL SQLSTATE “错误码” SET MESSAGE_TEXT = ‘错误信息’;
+ NEW : 关键字new为触发事件(insert|update)数据的对象。
+ OLD : 关键字 为delete事件数据的对象 OLD值因为是删除操作,所以全部是只读的。
* 查看触发器

#方式一  查看当前数据库触发器信息
SHOW TRIGGERS;
#方式二  查看当前数据库某个触发器信息
SHOW CREATE TRIGGER trigger_name;
#方式三   查看系统库所有的触发器信息
select * from information_schema.TRIGGERS;
  • 删除触发器
 #方式一
DROP TRIGGER trigger_name;
 #方式二。 检索后删除   推荐使用
DROP TRIGGER IF EXISTS trigger_name;

Original: https://www.cnblogs.com/Kuju/p/16173951.html
Author: 酷酷的sinan
Title: Mysql 触发器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/599238/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Javaweb07-三层架构(BaseDao)

    1、BaseDao 持久层业务接口实现类的公共父类,定义了jdbc操作数据库的所有公共方法,方便子类继承; import java.io.InputStream; import j…

    数据库 2023年6月16日
    096
  • SQLyog企业版

    一、下载与安装 1、SQLyog的下载 链接:https://www.aliyundrive.com/s/11ZuFqB1z4E提取码:63fu 2、SQLyog的安装 双击下载程…

    数据库 2023年6月11日
    0107
  • Mysql_范式入门

    MySQL 三大范式 为什么需要数据规范化 信息重复 更新异常 插入异常 无法正常显示信息 删除异常 丢失有效的信息 设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据…

    数据库 2023年6月11日
    079
  • web监听器解析

    监听器是web三大组件之一,事件监听机制如下: 事件:某个事件,如果初始化上下文 事件源:事件发生的地方 监听器:一个对象,拥有需要执行的逻辑 注册监听:将事件、事件源、监听器绑定…

    数据库 2023年6月16日
    075
  • [Unity]如何解决带刚体的物体在墙角会穿墙的问题

    问题背景 当一个物体在两个带碰撞体的方块组成的墙角时,只要”挤一挤”就可以从墙角穿墙而过: 原因分析 根据【Unity】Rigidbody.velocity…

    数据库 2023年6月16日
    0160
  • Oracle扩展表空间

    Oracle扩展表空间 前言: Oracle表空间扩展最大为32G,目前我还未找到可以打破限制的办法。 一、查看表空间信息和使用情况 查看表空间的名字及文件所在位置 — &amp…

    数据库 2023年6月16日
    095
  • MySQL主从备库过滤参数分析和测试

    测试环境: GTID的主从复制,主库(9900)——》备库(9909),存在测试库表: 9900_db1库:t1、t2、t3、t4、t5表 9900_db2库:t6、t7、t8、t…

    数据库 2023年5月24日
    057
  • MyBatis详解

    😀搭建 MyBatis mysql mysql-connector-java 8.0.29 org.mybatis mybatis 3.5.7 junit junit 4.12 t…

    数据库 2023年6月14日
    070
  • 并发编程学习

    Semaphore Semaphore 可以允许多个线程访问一个临界区。 应用:实现线程池 CountDownLatch 应用: 业务原始状态:一个线程执行查询订单,查询派送单,对…

    数据库 2023年6月16日
    090
  • 【转】MySQL合理使用索引

    索引可以说是数据库中的一个大心脏了,如果说一个数据库少了索引,那么数据库本身存在的意义就不大了,和普通的文件没什么两样。所以说一个好的索引对数据库系统尤其重要,今天来说说MySQL…

    数据库 2023年5月24日
    073
  • 2022-08-16 数据库查询语言之——-DQL

    重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。 构建数据库 创建一张student表: DROP TABLE IF EXIST…

    数据库 2023年5月24日
    069
  • day44-反射03

    Java反射03 3.通过反射获取类的结构信息 3.1java.lang.Class类 getName:获取全类名 getSimpleName:获取简单类名 getFields:获…

    数据库 2023年6月11日
    064
  • 边缘计算 | 在移动设备上部署深度学习模型的思路与注意点 ⛵

    💡 作者:韩信子@ShowMeAI📘 深度学习◉技能提升系列:https://www.showmeai.tech/tutorials/35📘 深度学习实战系列:https://ww…

    数据库 2023年6月14日
    094
  • git 烂笔头

    触类旁通, 举一反&amp…

    数据库 2023年6月9日
    071
  • ASP.NET CORE WEB项目介绍

    首先创建一个asp.net core web应用程序 第二步 目前官方预置了7种模板项目供我们选择。从中我们可以看出,既有我们熟悉的MVC、WebAPI,又新添加了Razor Pa…

    数据库 2023年6月14日
    088
  • 开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO

    当一个人处在持续地追求与锋锐地思索状态中,他将收获怎样的价值与自由? 有人说,敲过万行代码的程序员,可以写一份基础版入行指南,给初阶人群作入门参考。码过十万行代码的程序员,能写一本…

    数据库 2023年6月16日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球