本文带你从零开始玩转mysql触发器 | 超级有用的信息,建议收藏

 2024-03-20 01:18:02  阅读 0

特此,虫菌针对初学者系列教学开设了专门的专栏。 有兴趣的朋友可以关注《零基础教学》。

Bugs 做了这么多,就是为了一件事,就是教大家,而且教课也不收学费! 对您有帮助的朋友,请不要忘记给虫菌点个赞。 您的鼓励就是对我最大的支持! 那我们就开始说正事吧! Bugs要开始上课啦~

文章目录: 1. 环境说明

系统要求:.04

2. 前言

MySQL作为当今最流行的关系数据库管理系统之一,由瑞典MySQL AB公司开发,是其子公司产品。 由于MySQL是源代码,因此成本大大降低,但您也可以购买商业许可版本以获得高级支持服务(特殊企业用户需要)。

与其他数据库软件(例如数据库或SQL)相比,MySQL已经非常容易学习和掌握。 MySQL可以运行在UNIX、Linux等各种平台上; 它也可以安装在服务器甚至桌面系统上。 此外,MySQL 可靠、可扩展且快速。 如果您开发网站或 Web 应用程序,MySQL 是一个不错的选择(强烈推荐)。 MySQL 是 LAMP 堆栈的重要组成部分,其中包括 Linux、MySQL 和 PHP。 更多MySQL的介绍和使用请前往官网学习,这里不再赘述。

这里是MySQL官网:MySQL、MySQL社区版下载地址:MySQL::MySQL

三、前言:

使用过mysql的朋友一定知道mysql有事务、索引、触发器、存储过程等,那么今天就来和大家聊聊。

但也不会持续太久,顶多一两周……啊,一两天; 本期也是给允许私聊bug的朋友,会单独开期更新mysql触发器的相关基础知识教学; 朋友们请仔细看看~

在阅读文章时,如果您发现描述有错误或者理解有偏差,还请见谅。 毕竟经验有限,但是非常欢迎朋友们留下自己的意见,提供宝贵的建议和评论,在下面留言,找出我的不足之处。 虫菌的成长也见证着你的成长! 凡事尽力而为! 尽力而为。

**如果你觉得这篇文章最终对你有帮助,请不要吝啬点赞,在pia上点赞就搞定了! ! ! **您的鼓励是对写作最大的支持!

那我们就开始说正事吧! Bugs要开始上课啦~

四、本章内容: 1、什么是MySQL触发器? #1 基本概念: #2 功能: #3 版本: 2. 为什么使用MySQL触发器?

3. 如何创建MySQL触发器? #1基本语法

delimiter 自定义结束符号
create trigger 触发器名字 触发时间 触发事件 onfor each row
begin
    -- 触发器内容主体,每行用分号结尾
end
自定义的结束符合
delimiter ;

on table for every:触发器对象,触发器绑定的本质是表中的所有行,所以当每一行发生指定的变化时,触发器就会发生;

在:

触发器名称:标识触发器名称,由用户指定; 触发时间:标识触发时间,值为 或 AFTER; 触发事件:标识触发事件,取值为,或; 触发器表名:标识创建触发器的表名称,即在哪个表上创建触发器; 触发器程序体:可以是一条SQL语句,也可以是BEGIN和END中包含的多条语句。

可以看到可以创建6种类型的触发器,分别是: , , , AFTER , AFTER , AFTER 。

#2触发时间

当一条SQL指令发生时,行中的数据会发生变化,每个表中对应的行有两种状态:数据操作前和操作后。

PS:如果触发器失败或者语句本身失败,则after触发器(如果有)将不会被执行。

#3 触发事件

触发器只有在数据改变时才会触发,对应的操作也只是

#4 注意事项

在MySQL 5中,触发器名称在每个表中必须是唯一的,但在每个数据库中则不然,即同一数据库中的两个表可以具有相同名称的触发器。

每个表的每个事件一次只允许有一个触发器,因此每个表最多支持 6 个触发器

/ 之后 , / 之后 , / 之后

另一个限制是不能同时在一张表上创建两个相同类型的触发器,因此一张表上最多可以创建6个触发器。

#5 示例演示

1.创建一个完整的触发器示例:

我将首先创建一个名为的完整触发器;

目的:当用户表发生操作时,自动向表中插入一条日志记录,具体记录操作时间、更新前数据的用户名和用户id;

delimiter || 
create trigger trigger_demo AFTER UPDATE ON user for each row
BEGIN
		INSERT into log_info ( create_time,user_id,user_name )VALUES (now(), old.user_id,old.user_name);
END || 
	delimiter;

A。 变量详细解释

在 MySQL 中用于定义局部变量。 该变量只能在 BEGIN...END 复合语句中使用,并且应在复合语句的开头定义。

默认情况下,它是一个分号;。 在命令行客户端中,如果一行命令以分号结尾,则mysql按下回车后就会执行该命令。

delimiter || 

结束符定义为“||”,最后定义为“;”。 MYSQL默认的结束符是“;”。

b. NEW 和 OLD 的详细解释

上面的例子中使用了NEW关键字,它与MS SQL中的and类似。 MySQL中定义了NEW和OLD来表示

触发器所在表中触发触发器的数据行。

具体来说:

用途:新。 (是对应数据表的列名)

另外old是只读的,而new可以在触发器中使用set赋值,这样就不会再次触发触发器,造成循环调用(比如每次插入用户之前,在其前面拼接“”)用户代码)。 这允许您使用 set 来定义临时变量。

如下:定义一个临时变量,通常以@前缀命名,如@; 然后直接在你要执行的事件SQL中使用即可!

delimiter || 
create trigger trigger_demo_update AFTER update ON sys_user for each row
BEGIN
	SET @new_user_id = CONCAT('20210617',new.id);
	INSERT into log_info ( create_time,user_id,user_name )VALUES (now(), @new_user_id,new.user_name);
END || 
delimiter;

演示:

经过测试,更新用户后立即执行触发器,可以看到表操作日志插入了! 以下是表数据的截图。

经测试,添加用户后立即执行触发器,插入的数据成功写入表中。 以下是表数据的截图。

经测试,删除后立即执行触发器,删除前的数据成功写入表中。 以下是表数据的截图。

2.查看触发器

与查看数据库(show ;)和查看表(show ;)一样,查看触发器的语法如下:

show triggers;   #查看全部触发器
show create trigger trigger_demo_delete; #查看触发器的创建语句

3.删除触发器

与删除数据库、删除表一样,删除触发器的语法如下: 记住:触发器不能修改,只能删除。

drop trigger + 触发器名

Demo:直接命令删除;

DROP trigger trigger_demo_delete; #删除触发器 

您也可以选择要删除的触发器,然后单击【删除触发器】按钮。 将弹出二次确认。 单击[删除]。

问:触发器可以批量删除吗?

答:经测试,不可能。

验证下面执行了多次删除,但是执行失败!

显然,不支持批量删除。

单次删除成功。

请记住:如果不再需要某个触发器,必须立即将其删除,以避免意外操作。 这个非常重要。 记住,记住! ! !

#6 触发器的执行顺序

我们构建的数据库一般是数据库,在其上构建的表是事务表,是事务安全的。 此时,如果SQL语句或触发器执行失败,MySQL将会回滚事务,包括:

①如果触发器执行失败,SQL就无法正确执行。

②当SQL执行失败时,AFTER触发器不会触发。

③如果AFTER类型触发器执行失败,SQL将会回滚。

4. MySQL触发器应用

触发器针对数据库中的每一行记录。 每行数据在操作前后都会有对应的状态。 触发器将操作前的状态保存到old关键字,将操作后的状态保存到new;

因此说明:MySQL触发器不能对这张表执行、操作,否则会报错;

5. MySQL 触发器的优点和缺点 #1 优点 #2 缺点

4. 常用命令

show triggers;   #查看全部触发器
show create trigger [触发器名字]; 查看触发器的创建语句
DROP trigger [触发器名字]; #删除触发器 

5、个人建议

只用于低并发的项目和管理系统。 如果是面向用户的高并发应用,就不要使用。 触发器和存储过程本身难以开发和维护,并且无法高效移植。 触发器可以完全被事务替代。 存储过程可以替换为后端脚本。

标签: 触发 操作 小伙

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码