特此,虫菌针对初学者系列教学开设了专门的专栏。 有兴趣的朋友可以关注《零基础教学》。
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 触发器名字 触发时间 触发事件 on 表 for 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、个人建议
只用于低并发的项目和管理系统。 如果是面向用户的高并发应用,就不要使用。 触发器和存储过程本身难以开发和维护,并且无法高效移植。 触发器可以完全被事务替代。 存储过程可以替换为后端脚本。