MySQL深入浅出掌握触发器用法

目录
  • MySQL触发器
    • 触发器的特性
    • 创建触发器
    • demo
    • 触发器操作-NEW和OLD
    • demo
    • 触发器-查看
    • 触发器-删除
    • 触发器的注意事项

MySQL触发器

触发器是一种特殊的存储过程,触发器和存储过程一样是一个能完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用.

在MySQL中,只要执行insert,update,delete操作是才能触发触发器的执行

触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作.

使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的,现在触发器还值支持行级触发,不支持语句级触发.

触发器的特性

① 什么条件会触发: insert,delete,update

② 什么时候触发: 在增删改前或者后

③ 触发频率: 针对每一行执行

④ 触发器定义在表上,附着在表上

创建触发器

-- 创建只有一个执行语句的触发器
格式:
    create trigger 触发器名 before|after 触发事件
    on 表名 for each row
    执行语句;

-- 创建有多个执行语句的触发器
格式:
    create trigger 触发器名 before|after 触发事件
    on 表名 for each row
    begin
        执行语句列表
    end;

demo

-- 需求:当user表添加一行数据,则会自动在user_log添加日志记录

delimiter $$
create trigger trigger_test after insert
on user for each row
begin
    insert into user_logs values(1,now,'有新用户增加');
end $$
delimiter;

触发器操作-NEW和OLD

mysql中定义了new和old,用来表示触发器的所在表中,触发了触发器的哪一行数据,来引用触发器中发生变化的记录内容,具体如下

触发器类型 触发器类型NEW和OLD的使用
INSERT 型触发器 NEW 表示将要或者已经新增的数据
UPDATE 型触发器 OLD 表示修改之前的数据,NEW表示将要或者已经修改后的数据
DELETE 型触发器 OLD 表示将要或者已经删除的数据

使用方法: NEW.columnName(columnName为相应数据表某一列名)

demo

-- insert
	delimiter &&
	create trigger test1 after  insert
	on user for each row
	begin
		insert into user_logs values(1,now,concat('有新用户增加,信息为',NEW.uid,NEW.username,NEW.password));
	end $$
	delimiter;
-- update
delimiter &&
	create trigger test2 after update
	on user for each row
	begin
		insert into user_logs values(1,now,concat('修改用户,之前信息为',OLD.uid,OLD.username,OLD.password,'修改之后的信息为',NEW.uid,NEW.username,NEW.password));
	end $$
	delimiter;
-- delete
delimiter &&
	create trigger test3 after delete
	on user for each row
	begin
		insert into user_logs values(1,now,concat('有用户删除,信息为',OLD.uid,OLD.username,OLD.password));
	end $$
	delimiter;

触发器-查看

show triggers;

触发器-删除

drop trigger if exists trigger_test;

触发器的注意事项

① MYSQL中触发器中不能对本表进行insert,update,delete操作,以免递归循环触发

② 尽量少使用触发器,假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500次触发器,光是触发器执行的时间就要花费500s,而insert 500条数据一共是1s,那么insert的效率就非常的低了.

③ 触发器是针对每一行的,对增删改非常频繁的表上切记不要使用触发器,因为他会非常消耗资源.

到此这篇关于MySQL深入浅出掌握触发器用法的文章就介绍到这了,更多相关MySQL触发器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL触发器的使用

    触发器可以在执行语句前或执行后触发其他 SQL 代码运行.触发器可以读取触发语句改变了哪些数据,但是没有返回值.因此可以使用触发器加强业务逻辑的约束而不需要在应用程序写对应的代码. 从上述描述可以看到,触发器可以简化应用程序的逻辑并且可以提升性能,这是因为使用触发器减少了应用程序和服务端的交互次数.同时,触发器有助于完成自动更新归一化和统计数据.例如,我们可以使用触发器自动统计交易订单总金额,订单数及平均客单价. 然而,MySQL 的触发器的应用场合也十分有限,如果你使用过其他数据库产品的触发器

  • MySQL事件与触发器专题精炼

    目录 了解触发器和事件(定时器) 什么是触发器? 什么是事件(定时器)? 触发器和事件(定时器)的区别 创建触发器和事件(定时器) 创建触发器 创建事件(定时器) 对触发器和时间(定时器)的操作 查看当前数据库下的触发器和定时器 删除定时器和触发器 这里是MYSQL成圣之路  了解触发器和事件(定时器) 什么是触发器? 概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启

  • MySQL数据库触发器从小白到精通

    这里是MYSQL成圣之路  先了解一下触发器,再来讨论是否能完全代替外键 什么是触发器? 概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行.触发器经常用于加强数据的完整性约束和业务规则等. 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据

  • 详解mysql触发器trigger实例

    目录 什么是触发器 创建触发器 现在有表如下: 这里再啰嗦几句: 限制和注意事项 总结 数据库触发器有以下的作用: MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志表],当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如

  • Mysql存储过程、触发器、事件调度器使用入门指南

    目录 一.存储过程的简单使用 二.存储过程中的变量 三.变量的作用域 四.存储过程参数 五.逻辑控制语句 1.条件语句 2.循环语句 3.case分支 六.游标 七.自定义函数 八.触发器 九.事件 存储过程(Stored Procedure)是一种在数据库中存储复杂程序的数据库对象.为了完成特定功能的SQL语句集,经过编译创建并保存在数据库中. 一.存储过程的简单使用 创建存储过程 create procedure test() begin select * from users; end;

  • MySQL触发器trigger的使用

    目录 一.触发器简介 1.什么是触发器? 2.触发器的特性 二..创建触发器 1.创建只有一个执行语句的触发器 2.创建有多个执行语句的触发器 3.NEW与OLD详解 三.查看触发器 1.SHOW TRIGGERS语句查看触发器信息 2.在information_schema.triggers表中查看触发器信息 四.删除触发器 一.触发器简介 1.什么是触发器? 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合. 2.触发器的特性 有begin end体,begi

  • MySQL触发器的使用和优缺点介绍

    目录 前言 1. 触发器概述 2. 触发器的创建 2.1 创建触发器语法 2.2 代码举例 3. 查看.删除触发器 3.1 查看触发器 3.2 删除触发器 4. 触发器的优缺点 4.1 优点 4.2 缺点 4.3 注意点 前言 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时在库存表中添加一条库存记录. 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,

  • mysql触发器实时检测一条语句进行备份删除思路详解

    问题描述:用户有一个这样一个需求,在一张表里会不时出现 "违规" 字样的字段,需要在出现这个字段的时候,把整行的数据删掉.这是个采集任务,如果发现有"违规"字样的数据,会整点或者什么时间进行统一上报,也无法对源头进行控制让这种数据不生成. 现在需要实现以下需求: 1.实时检测这条数据的产生,发现后删除 2.在删除之前作备份这条数据 解决思路: 需要明确解决思路, 1.首先是如何实时探测删除?询问开发,这条数据的生成方式为insert,就可以做一个当表做插入的时候,然

  • 一篇文章带你深入了解Mysql触发器

    目录 1.对SC表进行插入或修改时,如果考试成绩不在0-100范围内时,则撤销插入或修改操作. 2.对SC表进行插入时,如果学生的选课总学分超过30,则报错并撤销插入. 3.对SC表进行修改时,不允许修改考试成绩不及格的学生选课记录. 4.对STUDENT表进行插入时,如果年龄为空,则将该生年龄设置为所有学生年龄的平均值. 5.在STUDENT表中增加两列,分别用来存放学生的平均成绩和等级,并对SC表进行插入后,自动维护学生的平均成绩和等级(85-100,等级为"优"; 60-85,等

  • MySQL深入浅出掌握触发器用法

    目录 MySQL触发器 触发器的特性 创建触发器 demo 触发器操作-NEW和OLD demo 触发器-查看 触发器-删除 触发器的注意事项 MySQL触发器 触发器是一种特殊的存储过程,触发器和存储过程一样是一个能完成特定功能.存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用. 在MySQL中,只要执行insert,update,delete操作是才能触发触发器的执行 触发器的这种特性可以协助应用在数据库端确

  • MySQL深入浅出精讲触发器用法

    目录 前言 触发器概述 触发器的创建 代码举例1 代码举例2 代码举例3 查看删除触发器 触发器的优点 触发器的缺点 注意点 前言 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时 在库存表中添加一条库存记录. 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用 事务 包裹起来,确保这两个操 作成为一个 原子操作 ,要么全部执行,要么

  • MySQL游标概念与用法详解

    本文实例讲述了MySQL游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓的同学应该知道有一个Api是Cursor,也是读取SQLite数据库用的,和这个有点类似. 2.使用游标的步骤 (1)声明 使用declare进行声明 declare 游标名 cursor for select_statement (2)打开游标 使用open进行打开 open 游标名 (3)从游标

  • mysql存储过程原理与用法详解

    本文实例讲述了mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018-04-17 什么是存储过程: 存储过程存储了一系列sql语句 存储过程的需求场景:下边是一个经典的需求场景,很多Mysql的书都有: 存储过程存储了一系列sql语句,使得简化了操作,不要求重复执行一系列操作.只需要在需要的时候调用一下存储过程就行了. 一般来说,可以认为存储过程的功能与函数的功能类似

  • MYSQL中Truncate的用法详解

    本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源更少.下面介绍SQL中Truncate的用法 当你不再需要该表时, 用 drop:当你仍要保留该表,但要删除所有记录时, 用 truncate:当你要删除部分记录时(always with a WHE

  • Mysql中的触发器定义及语法介绍

    目录 1.定义: 2.语法: 3.删除触发器 4.查询触发器 5.触发器类型OLD和NEW的使用 1.定义: 触发器和存储过程相似,都是嵌入到 MySQL 中的一段程序.触发器是由事件来触发某个操作.当数据库执行这些事件时,就会激活触发器来执行相应的操作.这些事件称为触发条件,在MySQL中,有UPDATE,INSERT,和DELETE. 在MySQL中,目前只有UPDATE,INSERT,和DELETE这三种操作,才会触发触发器,其他操作都不支持触发器.这和Oracle中的触发器有很大的区别,

  • Mysql视图和触发器使用过程

    目录 视图 触发器 视图 视图是什么, 是否真实存在? 个人理解:视图视图,只是你可以看见的一层抽象层, 它并不真实存在, 而是在真实存在的一张或者多张表之上的一层封装, 对于select查询语句的提前封装. 不涉及数据的存储. 这样的一层封装好处是蛮多的. 对于复杂查询操作语句的简化 --- 方便后序使用. 安全性,我们在使用视图 时,一般不会轻易通过视图对底层数据进行修改. 而且可以可以通过权限限制, 已得到更高的安全性. 官方定义: 视图(view)是一种虚拟存在的表,是一个逻辑表(不涉及

  • MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_exchange_award` AS p WHERE p.`act_type` = 4 or p.`act_type` = 5 AND p.`user_id` = ' .$user_id ; sql中的or语法一般用于多个条件的查询,上面的语法查询的相当于:两个sql查询出来的数据集合. $sql

  • Oracle触发器用法实例详解

    本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需要说明一下,触发器可以分为语句级触发器和行级触发器.详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发.而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次. 具体举例: 1.

  • Oracle使用触发器和mysql中使用触发器的案例比较

    一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志,自动通知好友,其实就是在增加日志的时候做一个出发,再向表中写入条目. --触发器的效率很高 举例:论坛的发帖,每插入一个帖子都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,这时使用触发器效率会很高. 二.Oracle 使用 PL/SQL 编写触发器 1.--PL/SQL创建触发器的一般语法

随机推荐