首页 教程 服务器/数据库 MySQL之触发器

MySQL之触发器

文章目录

  • MySQL触发器
    • 什么是触发器
    • 为什么使用触发器
    • 创建触发器
      • 添加事件
      • 删除事件
      • 修改事件
    • 删除触发器
    • 触发器的应用场景

MySQL触发器

什么是触发器

  • MySQL触发器(Trigger)是一种特殊的存储过程,
  • 它与表有关,当表上的特定事件(insert,update,delete)发生时,触发器会自动执行。
  • 可以使用触发器来实现数据约束,数据验证,数据复制等功能

为什么使用触发器

  • 可以实现数据约束,数据验证,数据复制等功能
    • 例如:
      • 可以创建一个触发器,在向表中插入一条记录时,自动向另一个表中插入一个记录,从而实现数据复制的功能。
  • 触发器还可以用于实现数据验证,
    • 例如
      • 在插入或更新数据时,检查记录的某些字段是否符合要求,则拒绝插入或者更新,这样可以保证数据的完整性和一致性。

创建触发器

语法:

createtrigger 触发器名称 {before |after } {insert|update|delete} -- 触发器类型和事件on 表名称 for each row-- 触发器的作用范围begin-- 触发器执行的操作end;

  • 触发器名称可以自定义 ,并唯一性,见名知意
  • before / after : 表示触发器的类型,分别表示发生前/发生后执行
  • insert / update / delete : 表示触发器的事件类型,分别表示插入 / 更新 / 删除操作
  • on 表名称 : 为触发器所在的表名
  • for each row : 表示触发器作用的范围,即每一行记录都会触发该触发器
  • begin 和 end之间是触发器执行的操作,可以是一条或者多条SQL语句
  • 触发器是自动执行的,无需手动调用,
  • 当表上的特定事件(insert , update, delete ) 发生时,触发器会自动执行
  • 在创建触发器时,可以定义触发器的类型和事件,从而控制触发器的时机和条件

案例:

-- 创建两张表createtable table1( id int, name varchar(20)characterset utf8 )charset= utf8;createtable table2( id int, name varchar(20)characterset utf8 )charset= utf8;

添加事件

-- 创建一个触发器,当向表中插入一条记录时,自动向另一个表中插入一条记录createtrigger insert_trigger_1 afterinserton table1 for each rowbegin-- 触发器的具体事件insertinto table2(id,name)values(NEW.id,New.name);end;

添加数据:

向table1表中添加数据时,会触发insert_trigger_1触发器,自动向table2表中添加数据

insertinto table1(id,name)values(1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六'),(5,'唐七'),(6,'老王');

查询table1表

select*from table1;

MySQL之触发器

查询table2表

select*from table2;

MySQL之触发器

删除事件

-- 创建一个触发器,当从表中删除一条记录时,自动从另一个表中删除一条记录createtrigger delete_trigger_1 afterdeleteon table1 for each rowbegindeletefrom table2 where id = OLD.id and name = OLD.name;end;

删除数据:

删除table1表中数据时,会触发delete_trigger_1触发器,自动删除table2表中对应的数据

deletefrom table1 where id =5and name ='王五';

查看两张表中的数据

select*from table1;

MySQL之触发器

select*from table2;

MySQL之触发器

修改事件

-- 创建一个触发器,当向表中更新一条记录时,自动更新另一个表中的记录createtrigger update_trigger_1 afterupdateon table1 for each rowbeginupdate table2 set id = NEW.id, name = NEW.name where id = OLD.id and name = OLD.name;end;

修改数据:

修改table1表中数据时,会触发update_trigger_1触发器,自动更新table2表中对应的数据

update table1 set id =10,name ='小明'where id =6and name ='老王';

select*from table1;

MySQL之触发器

select*from table2;

MySQL之触发器

删除触发器

droptrigger 触发器名称;

触发器的应用场景

触发器的应用场景包括但不限于以下几种:

  1. 强制实施业务规则:通过在触发器中编写逻辑,可以在特定的表上自动执行业务规则,例如检查输入的数据是否符合要求,或者限制某些操作的执行。
  2. 记录日志变更:通过在触发器中编写逻辑,可以在特定的表上自动记录数据的变更情况,例如记录数据的修改时间、修改人等信息。
  3. 复杂的默认值计算:通过在触发器中编写逻辑,可以在特定的表上自动计算默认值,例如根据其他字段的值计算出一个新的字段的值。
  4. 数据同步:通过在触发器中编写逻辑,可以在多个表之间自动同步数据,例如在一个表中插入一条数据时,自动在另一个表中插入相应的数据。
  5. 数据校验:通过在触发器中编写逻辑,可以在特定的表上自动校验数据的正确性,例如检查数据的唯一性、完整性等。

总结:

触发器的应用场景非常广泛,可以用于强制实施业务规则、记录日志变更、复杂的默认值计算、数据同步以及数据校验等。在创建触发器时,需要指定触发器的名称、触发器所在的表、触发器的触发时机(如insert、update或delete操作)、触发器的执行次数(for each row或for each row statement)以及触发器的逻辑。

评论(0)条

提示:请勿发布广告垃圾评论,否则封号处理!!

    猜你喜欢
    【MySQL】用户管理

    【MySQL】用户管理

     服务器/数据库  2个月前  2.18k

    我们推荐使用普通用户对数据的访问。而root作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了。

    Cursor Rules 让开发效率变成10倍速

    Cursor Rules 让开发效率变成10倍速

     服务器/数据库  2个月前  1.23k

    在AI与编程的交汇点上,awesome-cursorrules项目犹如一座灯塔,指引着开发者们驶向更高效、更智能的编程未来。无论你是经验丰富的老手,还是刚入行的新人,这个项目都能为你的编程之旅增添一抹亮色。这些规则文件就像是你私人定制的AI助手,能够根据你的项目需求和个人偏好,精确地调教AI的行为。突然间,你会发现AI不仅能理解Next.js的最佳实践,还能自动应用TypeScript的类型检查,甚至主动提供Tailwind CSS的类名建议。探索新的应用场景,推动AI辅助编程的边界。

    探索Django 5: 从零开始,打造你的第一个Web应用

    探索Django 5: 从零开始,打造你的第一个Web应用

     服务器/数据库  2个月前  1.16k

    Django 是一个开放源代码的 Web 应用程序框架,由 Python 写成。它遵循 MVT(Model-View-Template)的设计模式,旨在帮助开发者高效地构建复杂且功能丰富的 Web 应用程序。随着每个版本的升级,Django 不断演变,提供更多功能和改进,让开发变得更加便捷。《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体,是一本从零基础到精通Django Web企业级开发技术的实战指南《Django 5 Web应用开发实战》内容以。

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

     服务器/数据库  2个月前  1.09k

    mysql_secure_installation 是 MySQL 提供的一个安全脚本,用于提高数据库服务器的安全性

    【MySQL基础篇】概述及SQL指令:DDL及DML

    【MySQL基础篇】概述及SQL指令:DDL及DML

     服务器/数据库  2个月前  489

    数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。

    Redis中的哨兵(Sentinel)

    Redis中的哨兵(Sentinel)

     服务器/数据库  2个月前  315

    ​ 上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。