学习笔记之MySQL触发器详解

触发器是由事件来触发某个操作,这些事件包括INSERT语句,UPDATE语句和DELETE语句

创建触发器

创建只有一个执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW 执行语句其中,触发器名参数指要创建的触发器的名字

1、创建MySQL触发器:

语法:

 代码如下复制代码

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name 

FOR EACH ROW 

BEGIN 

trigger_stmt 

END; 

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name

FOR EACH ROW 

BEGIN

trigger_stmt

END;

 

例子

 代码如下复制代码

CREATE TRIGGER SetUserHome after insert ON users 

FOR EACH ROW 

BEGIN 

update `users` set homeLocationX = 128,

homeLocationY=128, homeLocationZ=30 

where uuid = NEW.uuid

END 

以上的例子是错误的, 让本表进行触发时进行更新会让程序进入死循环。

系统会报这样的错误:it is already used by statement which invoked this stored function/trigger.

应该改成以下语句:

 代码如下复制代码

CREATE TRIGGER SetUserHome before insert ON users 

FOR EACH ROW 

BEGIN 

set New.homeLocationX = 128;

set New.homeLocationY = 128;

音疯 音疯

音疯是昆仑万维推出的一个AI音乐创作平台,每日可以免费生成6首歌曲。

音疯 146 查看详情 音疯

set New.homeLocationZ=30; 

END 

BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后

FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器

 代码如下复制代码

mysql> CREATE TRIGGER trig1 AFTER INSERT
    -> ON work FOR EACH ROW
    -> INSERT INTO time VALUES(NOW());

Query OK, 0 rows affected (0.09 sec)上面创建了一个名为trig1的触发器,一旦在work中有插入动作,就会自动往time表里插入当前时间

 

创建有多个执行语句的触发器

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
    执行语句列表
END其中,BEGIN与END之间的执行语句列表参数表示需要执行的多个语句,不同语句用分号隔开

tips:一般情况下,mysql默认是以 ; 作为结束执行语句,与触发器中需要的分行起冲突

     为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||

     当触发器创建完成后,可以用DELIMITER ;来将结束符号变成;

 

 代码如下复制代码

mysql> DELIMITER ||
mysql> CREATE TRIGGER trig2 BEFORE DELETE
    -> ON work FOR EACH ROW
    -> BEGIN
    -> INSERT INTO time VALUES(NOW());
    -> INSERT INTO time VALUES(NOW());
    -> END
    -> ||
Query OK, 0 rows affected (0.06 sec)

 

mysql> DELIMITER ;上面的语句中,开头将结束符号定义为||,中间定义一个触发器,一旦有满足条件的删除操作

就会执行BEGIN和END中的语句,接着使用||结束

最后使用DELIMITER ; 将结束符号还原

 查看触发器

SHOW TRIGGERS语句查看触发器信息

 代码如下复制代码 mysql> SHOW TRIGGERSG;
*************************** 1. row ***************************
             Trigger: trig1
               Event: INSERT
               Table: work
           Statement: INSERT INTO time VALUES(NOW())
              Timing: AFTER
             Created: NULL
            sql_mode:
             Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci

  Database Collation: latin1_swedish_ci结果会显示所有触发器的基本信息

tips:SHOW TRIGGERS语句无法查询指定的触发器

 在triggers表中查看触发器信息

 代码如下复制代码 mysql> SELECT * FROM information_schema.triggersG
*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: person
              TRIGGER_NAME: trig1
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: person
        EVENT_OBJECT_TABLE: work
              ACTION_ORDER: 0
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: INSERT INTO time VALUES(NOW())

结果显示了所有触发器的详细信息,同时,该方法可以查询制定触发器的详细信息

 

 代码如下复制代码 mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME=’trig1’G
*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: person
              TRIGGER_NAME: trig1
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: person
        EVENT_OBJECT_TABLE: worktips

:所有触发器信息都存储在information_schema数据库下的triggers表中

     可以使用SELECT语句查询,如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询

 删除触发器

mysql> DROP TRIGGER trig1;
Query OK, 0 rows affected (0.04 sec)删除触发器之后最好使用上面的方法查看一遍

同时,也可以使用database.trig来指定某个数据库中的触发器

tips:如果不需要某个触发器时一定要将这个触发器删除,以免造成意外操

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1044108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 06:03:10
下一篇 2025年12月2日 06:04:01

相关推荐

  • PHP 函数的数据库操作高级技术

    php 提供了高级数据库操作函数,涵盖以下功能:连接数据库(mysqli_connect()、pdo)执行 sql 查询(mysqli_query()、pdo::query())获取查询结果(mysqli_fetch_assoc()、pdo::fetch())插入数据(mysqli_query()、…

    2025年12月9日
    000
  • 如何优化php函数中的数据库查询?

    优化 PHP 函数中的数据库查询 查询优化对于提升 Web 应用程序的性能至关重要。通过优化 PHP 函数中的数据库查询,我们可以显着减少页面加载时间并提高整体用户体验。 使用预处理语句 预处理语句是防止 SQL 注入攻击的标准方式。它还可以提高查询性能,因为它允许数据库提前编译查询并缓存执行计划。…

    2025年12月9日
    000
  • 如何使用 Apache、MySQL、PHP 和虚拟主机创建强大的 Ubuntu Web 服务器

    使用完整的 ubuntu 设置指南轻松部署和管理您的 web 开发环境 web 服务器的重要性 网络服务器是任何网站的支柱,作为向全球用户提供内容的平台。网络服务器的效率和可靠性对于您在线业务的成功至关重要。 ubuntu、apache、mysql、php 和虚拟主机概述 立即学习“PHP免费学习笔…

    2025年12月9日
    000
  • php函数与数据库交互中的困难解析与修复

    php 数据库交互常见困难及修复:无法连接到数据库:检查密码和用户名、启动数据库服务器或打开防火墙端口。sql 语句执行失败:检查语法、确保表和列存在或授予适当权限。无法获取查询结果:检查查询条件、优化 sql 语句或等待服务器繁忙期结束后再尝试。 PHP 函数与数据库交互中的常见困难解析与修复 实…

    2025年12月9日
    000
  • php函数在不同框架中的兼容性分析

    PHP 函数在不同框架中的兼容性分析 在 PHP 开发中,选择合适的框架可以极大地提高效率和可维护性。然而,不同的框架可能对 PHP 函数具有不同的兼容性。本文将分析一些常用 PHP 函数在主流框架中的兼容性,并提供实战案例。 主流 PHP 框架 LaravelSymfonyCodeIgniterZ…

    2025年12月9日
    000
  • php函数与数据库交互的完整指南

    使用 php 函数操作 mysql 数据库涉及以下步骤:使用 mysqli_connect() 建立数据库连接使用 mysqli_query() 执行 sql 查询使用 mysqli_query() 插入数据使用 mysqli_query() 更新数据使用 mysqli_query() 删除数据 使…

    2025年12月9日
    000
  • Laravel 入门:查询生成器初学者指南

    laravel 的 查询生成器 提供了一个强大、流畅的界面,用于在 php 中构建 sql 查询。它允许您以富有表现力的、类似 sql 的语法与数据库交互,同时抽象出大部分复杂性。 我们将演练 laravel 应用程序中的典型用例,使用查询生成器执行各种任务,例如选择、插入、更新和删除数据。 第 1…

    2025年12月9日
    000
  • php函数跨平台兼容性秘诀

    秘诀一:使用 php 内置函数,最大限度减少跨平台兼容性问题。秘诀二:避免硬编码路径,使用相对路径或 php 常量引用文件和目录。秘诀三:考虑操作系统差异,在函数中进行适当调整。秘诀四:使用多平台函数库,例如 pear 或 symfony components。实战案例:跨平台文件读取函数使用相对路…

    2025年12月9日
    000
  • PHP 函数如何使用 MySQL 调用外部函数?

    PHP 函数如何使用 MySQL 调用外部函数? 在 MySQL 中,外部函数是被定义在数据库之外的可执行程序或库,可以在查询中调用。PHP 提供了 mysqli_register_func() 和 mysqli_external_function() 函数,使您可以将 PHP 函数注册为 MySQ…

    2025年12月9日
    000
  • PHP异常处理中的堆栈跟踪功能详解

    堆栈跟踪是 php 异常处理中的功能,通过 $e->gettrace() 获取,包含异常发生的文件路径、函数名称、参数值、类名和方法名。它能帮助定位和修复错误,如示例中展示的调试数据库查询,通过堆栈跟踪可快速定位到错误函数和原因。 PHP异常处理中的堆栈跟踪功能详解 堆栈跟踪,是在 PHP 中…

    2025年12月9日
    000
  • PHP 函数内存泄露检测与修复指南

    PHP 函数内存泄露检测与修复指南 引言 内存泄露是指由于编程不当或缺陷,导致 PHP 应用驻留内存,即使程序不再需要它们。这可能导致性能下降、服务器崩溃,甚至应用程序崩溃。 内存泄露的检测 立即学习“PHP免费学习笔记(深入)”; 有几种检测 PHP 内存泄漏的方法: 使用 PHP 内置的 mem…

    2025年12月9日
    000
  • 如何针对不同平台和系统优化 PHP 函数和 C 扩展交互?

    针对不同平台和系统优化 php 函数和 c 扩展交互的答案如下:优化交互时,首先确定 c 扩展的瓶颈。根据平台选择适当的数据结构。优化内存分配以避免碎片和性能下降。在多线程环境中使用线程安全技术。优化 php 函数和 c 扩展交互可以提高性能、可靠性和兼容性,释放扩展的全部潜力。 如何针对不同平台和…

    2025年12月9日
    000
  • 剖析 PHP 函数执行的瓶颈

    php 函数执行瓶颈包括数据库查询、网络 i/o、内存分配、计算复杂度和锁定。剖析工具(如 xdebug、blackfire 和 tideways)有助于识别瓶颈。数据库查询可通过优化连接、索引和缓存进行优化;网络 i/o 可通过减少调用、使用缓存和批量处理得到优化;内存管理可通过弱引用和对象回收得…

    2025年12月9日
    000
  • PHP函数中异常处理的机制和原理是什么?

    php 异常处理机制允许捕获和处理运行时错误和异常情况,通过异常类来表示错误类型,通过 try-catch 块捕获异常,并通过异常对象获取错误详细信息,从而提升错误隔离、代码清晰度和用户体验。 PHP 函数中的异常处理机制 异常处理机制是一种处理运行时错误和异常情况的机制。PHP 中的异常处理机制允…

    2025年12月9日
    000
  • 提高 PHP 效率:经过验证的性能优化技术

    优化 php 性能可确保我们的 web 应用程序平稳运行、快速响应并高效处理流量。下面是关于如何有效地最大化 php 性能的详细分步指南,并为每种优化策略提供了实践示例。 第 1 部分:更新到最新的稳定 php 版本 第 1 步:检查当前 php 版本 首先检查系统上安装的当前 php 版本: ph…

    2025年12月9日
    000
  • PHP 匿名函数在处理数据结构中的应用

    php 匿名函数在数据结构处理中的应用:轻松处理数组,例如通过匿名函数排序。方便处理对象,例如通过匿名函数筛选满足条件的对象。在处理 mysql 查询结果时提供灵活性和简便性,例如匿名函数可用于提取特定列数据。 PHP 匿名函数在处理数据结构中的应用 引言 匿名函数,也称为闭包,是 PHP 中一种强…

    2025年12月9日
    000
  • 使用 PHP 匿名函数中的命名空间?

    php 匿名函数可以在命名空间中定义,继承命名空间中的类、常量和函数。为了访问外部变量,匿名函数可以使用 use 子句捕获它们,即使是在命名空间之外声明的变量。 使用 PHP 匿名函数中的命名空间 PHP 匿名函数提供了一种定义不需要命名函数的便捷方式。但是,匿名函数不能直接访问其包含范围之外的变量…

    2025年12月9日
    000
  • PHP 函数参数绑定在组合函数中的应用?

    php参数绑定在组合函数中通过将变量绑定到查询中的命名参数,可以防止sql注入并提高效率。具体步骤包括:创建数据库连接。准备一个带有命名参数的查询。使用bindparam方法绑定变量到参数。执行查询。获取结果或更新记录数。 PHP 参数绑定在组合函数中的用法 参数绑定是一种节省资源的技术,它可以防止…

    2025年12月9日
    000
  • 不同数据库系统中参数绑定的实现有何异同?

    不同数据库系统中,参数绑定实现的差异主要体现在:参数占位符:常见占位符为问号;准备语句:用于优化查询执行,在准备阶段提供参数值;类型化:不同系统对参数类型化处理不同,有的强制执行,有的允许动态绑定;sql 执行:系统通过匹配参数值和占位符进行操作,处理空值和越界值策略也有差异。 不同数据库系统中参数…

    2025年12月9日
    000
  • 参数绑定在 PHP 代码测试中的作用

    php 单元测试中,参数绑定可增强代码可读性、可维护性和可靠性。它通过使用占位符将输入数据与查询分开,防止 sql 注入攻击,并简化查询更新和维护。 参数绑定在 PHP 代码测试中的作用 引言 参数绑定是一个在 PHP 单元测试中管理数据库交互的宝贵工具。它通过使用占位符将输入数据与查询分开,从而增…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信