mysql-trigger触发器详解
触发器是与表相关的数据库对象,当满足定义的条件时触发并执行触发器中定义的语句集。触发器的这一特性可以帮助应用程序确保数据库端的数据完整性。当然,触发器不仅可以执行插入操作,还可以执行修改和删除操作。INSERT类型触发器:插入某一行时激活触发器,可以通过INSERT、LOAD DATA、REPLACE语句触发; UPDATE触发器:当行发生更改时激活触发器,可能由UPDATE语句触发; DELETE触发器:删除行时激活触发器,可以由DELETE、REPLACE语句触发器触发。trigger_body:触发器的程序体,可以是一条SQL语句,也可以是包含BEGIN和END的多条语句。创建名为 trig1 的触发器。
1.什么是触发器
触发器是与表相关的数据库对象,当满足定义的条件时触发并执行触发器中定义的语句集。 触发器的这一特性可以帮助应用程序确保数据库端的数据完整性。
比如你现在有两张表【用户表】和【日志表】,当创建用户时,需要将创建的日志插入到日志表中。 如果不使用触发器,则需要编写编程语言逻辑来实现,但是如果定义了触发器,触发器的作用就是在向日志表中插入一条数据后,帮助你向日志表中插入一条日志消息。用户表。 当然,触发器不仅可以执行插入操作,还可以执行修改和删除操作。
二、触发器的特点: 什么条件会触发: INSERT语句、UPDATE语句、DELETE语句什么时候触发: 添加、删除、修改前后的触发频率: 对表上定义的每一行执行触发器附表3。 创建触发器
创建触发器的语法如下:
CREATE TRIGGER
trigger_name
trigger_time trigger_event ON
table_name
FOR EACH ROW
trigger_body
触发器名称:触发器的名称
tirgger_time:触发执行的时间,BEFORE或AFTER,事件之前或之后
trigger_event:触发事件,为INSERT、DELETE或UPDATE
INSERT类型触发器:插入某一行时激活触发器,可以通过INSERT、LOAD DATA、REPLACE语句触发(load data语句将文件的内容插入到表中,相当于insert语句,而Replace语句一般和insert类似,但是如果表中有主索引或者唯一索引,如果插入的数据与原来的主键或者唯一索引相同,那么就会删除原来的数据,并生成一条新的数据数据会被添加,所以有时候一条replace语句相当于执行一条delete和insert语句); UPDATE触发器:当行发生更改时激活触发器,可能由UPDATE语句触发; DELETE触发器:删除行时激活触发器,可以由DELETE、REPLACE语句触发器触发。
table_name:表示创建触发器的表名,即创建触发器的表。
FOR EACH ROW:表示对满足触发事件的记录的任何操作都会触发触发器,也就是说触发器的触发频率是每行数据触发一次。
trigger_body:触发器的程序体,可以是一条SQL语句,也可以是包含BEGIN和END的多条语句。
1、创建只有一条执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;
例如:
创建名为 trig1 的触发器。 一旦工作表中有插入动作,当前时间就会自动插入到时间表中。
CREATE TRIGGER trig1 AFTER INSERT ON work FOR EACH ROW INSERT INTO time VALUES(NOW());
2、创建多条执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END;
其中,BEGIN和END之间的执行语句列表参数代表需要执行的多条语句,不同的语句之间用分号分隔。
提示:一般情况下,mysql使用; 默认作为执行语句的结束,与触发器中要求的分支冲突。
为了解决这个问题,可以使用DELIMITER,如:DELIMITER ||,可以将结束符号改为||
创建触发器后,可以使用DELIMITER; 将结束符号更改为;
例如:
定义一个触发器。 一旦有满足条件的删除操作,就会执行BEGIN和END中的语句。
DELIMITER ||
CREATE TRIGGER trig2 BEFORE DELETE
ON work FOR EACH ROW
BEGIN
NSERT INTO time VALUES(NOW());
INSERT INTO time VALUES(NOW());
END||
DELIMITER ;
3. NEW 和 OLD 详细解释
MySQL中定义了New和OLD,用于表示触发器所在表中触发触发器的数据行,指触发器中发生变化的记录内容,具体为:
在INSERT类型触发器中,NEW用于表示将要(BEFORE)或已经(AFTER)插入的新数据; 在UPDATE类型触发器中,OLD用于表示将要或已经修改的原始数据,NEW用于表示将插入的数据或已修改的新数据; 在DELETE触发器中,OLD用于表示将要或已经被删除的原始数据;
指示:
NEW.columnname:新增行的某列数据(columnName为相应数据表某一列名) OLD.columnname:删除行的某列数据(columnName为相应数据表某一列名)
另外,OLD是只读的,而NEW可以在触发器中使用SET赋值,这样就不会再次触发触发器,造成循环调用(比如插入学生之前,在其学生前面加上“2013”)数字) 。
delimiter $$
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END$$
delimiter ;
四、查看触发器
1.SHOW TRIGGERS语句查看触发器信息
#查询所有触发器
SHOW TRIGGERS
显示所有触发器的基本信息; 无法查询指定的触发器。
2、查看information_schema.triggers表中指定的触发器信息
#查询指定触发器
SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='trig1';
显示所有触发器的详细信息; 同时该方法可以查询指定触发器的详细信息。
Tips:所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询。 如果触发器信息过多,最好通过TRIGGER_NAME字段指定查询。
5.删除触发器
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
#删除指定触发器
drop trigger trig1;
删除触发器后,最好再用上面的方法检查一下; 同时,还可以使用database.trig指定数据库中的触发器。
Tips:如果不需要触发器,必须将其删除,以免发生意外操作。 这个非常重要。
总结
触发器是基于行触发的,所以删除、添加或者修改操作都可能会激活触发器,所以不要写的过于复杂的触发器,也不要添加太多的触发器,这样会影响数据的插入、修改或者删除。会产生严重的影响,也会导致可移植性差,所以在设计触发器的时候一定要考虑到。
触发器是一种特殊的存储过程,当在特定表中插入、删除或修改数据时触发执行。 它比数据库本身的标准功能具有更精细、更复杂的数据控制能力。
说到电脑处理器,我们就不得不想到英特尔和AMD处理器,但要问这几款处理器中哪一款的性能最好,估计大多数人都很难立即回答。 今天我就告诉大家如何获得最快的速度。 了解AMD处理器的性能定位。
提到这款AMD处理器,很多人立刻想到的是高功耗、高发热量。 如果还有人有这种想法,那我只能说你无知了。 现在AMD在这个过程中已经远远超越了Intel。 是的,所有AMD处理器都已经进入7nm时代,而Intel还徘徊在10nm左右。 所以,现在的AMD已经不再是以前的AMD了。 您可以放心购买。 不要听别人说AMD不如Intel。 相反,现在的AMD比Intel性价比高很多。
接下来我就先告诉大家如何区分AMD处理器的性能。 其实看AMD处理器的性能非常简单。 我们只需要看系列和数字。 现在市场上唯一活跃的 AMD 处理器是新的 Athlon 和 Ryzen 系列。 新Athlon定位为低端入门级处理器,一般用于要求不高的电脑。 Ryzen系列每年都被定位为主流处理器。 人们装机选择最多的系列,也是各大电脑厂商选择最多的系列。 至于Ripper系列的旗舰处理器,一般用在工作站或者服务器上,很少用在家用电脑上,所以我们只需要重点关注Ryzen系列。
Ryzen系列分为四个系列,R3、R5、R7、R9。 其中,R3定位为入门系列,R5定位为主流产品,R7定位为高端产品,R9定位为旗舰产品。 那么我们可以结合它的发布年份来轻松定位它的表现。 理论上来说,级数和数量越大,其性能越好。 这就好比R7 5700肯定比R5 5600好,R9 5900X比R9 5900X好。 R7 5700很强,但是这里大家要注意了,我这里只比较同一时期发布的处理器,如果两者发布年份相差不是太大的话,需要根据实际性能来判断。 如果要将Ryzen系列与Intel进行比较,那么R3相当于Core i3,R5相当于i5,R7相当于i7,R9相当于i9。
另外,在这个Ryzen系列中,你会发现很多带有X的处理器,对于这部分处理器,很多人不知道它意味着什么。 事实上,带X的处理器比不带X的处理器,超频质量会更好,而且这部分处理器支持自动超频功能,但这需要主板的支持。 就超频而言,AMD确实比Intel更良心,因为Intel只能支持K处理器超频,而AMD处理器基本全系列都支持超频。 另外AMD处理器接口也可以用好几代,而Intel处理器基本上每次发布新一代都需要换接口,所以AMD相对来说性价比更高。
总体来说,对于我们家庭用户来说,选择R5系列处理器就可以满足主流应用的需求。 如果要求更高,那么我们可以选择R7系列。 至于R9系列,如果没有特殊要求,其实是买不到的,所以我们在选择AMD处理器的时候,不必选择R9系列。 对于处理器的选择,我们主要还是看自己的需求,因为不同的用途对处理器的需求是不同的。 另外,如果选择AMD处理器,建议先选择AMD显卡,这样可以组成3A平台,有一定的性能加成。 以上就是关于这款AMD处理器的全部内容了,大家觉得怎么样呢? #头条创作挑战#