首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL select语句导致after delete触发器始终为空

的原因是,after delete触发器在执行时,会检查触发器中的NEW和OLD值。而在select语句中,不会产生NEW和OLD值,因此触发器始终为空。

解决这个问题的方法是,在触发器中使用BEFORE DELETE触发器代替AFTER DELETE触发器。BEFORE DELETE触发器在执行时,可以访问OLD值,因此可以正确地处理select语句导致的触发器为空的情况。

另外,还可以考虑使用其他方式来实现需要的功能,例如使用存储过程或者在应用程序中处理相关逻辑。

MySQL是一种开源的关系型数据库管理系统,具有广泛的应用场景。它支持多种操作系统和编程语言,并提供了丰富的功能和工具来管理和操作数据库。

腾讯云提供了多种与MySQL相关的产品和服务,包括云数据库MySQL、数据库备份、数据库迁移、数据库审计等。您可以通过腾讯云官网了解更多关于这些产品的详细信息和使用方法。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL触发器案例分析及before与after的区别

触发器创建语法四要素: 1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete...对于INSERT语句, 只有NEW是合法的; 对于DELETE语句,只有OLD才合法; 对于UPDATE语句,NEW、OLD可以同时使用。...after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量; before是先完成触发,再增删改,触发的语句先于监视的增删改...的触发器: DELIMITER $ CREATE TRIGGER tri_delete_blocks_infos after DELETE ON blocks_infos FOR EACH ROW BEGIN...(after/before)的相同触发事件(insert/update/delete),只能定义一个触发器,并且before的形式的触发器需要保证触发端和被触发端都得成功才能成功!

2.4K10

Mysql数据库基础知识总结,结构分明,内容详细

DELETE FROM departments WHERE department_name = ‘Finance’; 4.MySQL数据类型 任何字段如果非负数,必须是 UNSIGNED 【 强制...向视图提供数据内容的语句SELECT语句,可以将视图理解存储起来的SELECT语句 在数据库中,视图不会保存数据,数据真正保存在数据表中。...a.触发器的创建 创建触发器语法 CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块...BEFORE|AFTER :表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发。 INSERT|UPDATE|DELETE :表示触发的事件。...,此时基于子 表的UPDATE和DELETE语句定义的触发器并不会被激活。

51530

MySQL触发器

注意 MySQL触发器 定义 MySQL触发器和存储过程一样,都是嵌入到MysQL中的一段程序,不过触发器不要调用,而是由事件触发的,这些事件包括insert,update,delete语句,如果定义了触发程序...trigger_name :触发器的名字 trigger_time: 触发器触发的时机,取值before,after before:表示在激发触发器语句执行之前执行触发器的执行语句 after:表示在激发触发器语句执行之后执行触发器的执行语句...trigger_event:触发事件,取值insert,update,delete insert :比如Mysql中的insert和replace语句就会触发这个事件 update:更新某一行的数据会激发这个事件...,比如update语句 delete:删除某一行的时候激发触发器,可能通过delete或者replace语句激发 table:标识建立触发器的表名,即是当那张表发生了insert,update,delete...这时,若SQL语句触发器执行失败,MySQL 会回滚事务,有: 如果 BEFORE 触发器执行失败,SQL 无法正确执行。 SQL 执行失败时,AFTER触发器不会触发。

5K20

MySQL(十一)之触发器

MySQL在触发DELETE/UPDATE/INSERT语句时就会自动执行所设置的操作,其他SQL语句则不会激活触发器。...1.3、触发器四要素 监视地点:table 监听事件:insert/update/delete 触发时间:after/before 触发事件:insert/update/delete 二、触发器用法...  { BEFORE | AFTER }  --触发器有执行的时间设置:可以设置事件发生前或后。   ...ON   --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。   ...MySQL中是固定的   begin   sql语句;   end$   分析:由于在以上代码段中的“sql语句;”是以分号结尾,所以需要将MySQL中的结尾标志换成“$”,更换MySQL命令结束标志的命令

2K80

深入理解MySQL触发器

使用场合: 触发器是基于事件的,主要的事件也就是MySQL的增删改操作,即insert,delete,update。 2....所有触发器信息都存储在information_schema数据库下的triggers表中,可以使用SELECT语句查询。如果有很多个触发器,最好通过TRIGGER_NAME字段指定查询某一个触发器。...) Rows matched: 1 Changed: 1 Warnings: 0 更新数据后: 购买量无法超过3 关于触发器与事务 对于事务表(Innodb),before语句后面的判断语句失败将会导致回滚事件语句执行的所有更改...触发器失败会导致语句失败,因此触发器失败也会导致回滚。对于非事务性表(MyISAM),无法执行此类回滚,因此尽管语句失败,但在错误点之前执行的任何更改仍然有效。...因为触发器对update,delete,insert等事件做了处理,并且是按照before,SQL语句after的顺序来执行的,一旦某一步出错,就会回滚数据。如果在触发器中使用事务,就会产生矛盾。

62910

Mysql数据库-触发器

触发器(trigger)是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。 2....trigger 触发器名称 before/after -- 在...之前/在...之后 insert/update/delete -- 触发事件 on 表名 -- 监听的表 for each row...因为默认结束符是分号,如果不修改结束符,那么mysql一遇到分号,它就要自动执行,触发器创建语句就会执行不完整,从而报错. 所以像这样的语句, 就需要事先把delimiter换成其它符号....执行示例: -- 表示声明结束符$ mysql> delimiter $ mysql> -- 此时使用分号; 作为结尾不能执行SQL语句了。..., 完成删除数据时的日志记录 delimiter $ -- 声明结束符 $ create trigger account_delete -- 创建触发器 account_delete after

87120

数据库中的存储过程、游标、触发器与常用的内置函数

) (1)after insert 触发器,在插入数据之后获得@id变量以显示最新的自增长ID (2)after delete 触发器,把被删除的行数据保存在一个存档表中 (3)before update...ROW trigger_statement trigger_name: 触发器的名称 tirgger_time: 触发时机,BEFORE或者AFTER trigger_event: 触发事件,...和END包含的多条 语句 (3)MySQL中可以创建 6 种触发器 #(1)BEFORE INSERT #(2)BEFORE DELETE #(3)BEFORE UPDATE #(4)AFTER INSERT...#(5)AFTER DELETE #(6)AFTER UPDATE 3.2 示例(本节使用MySQL描述) (1)after insert 触发器,在插入数据之后获得@id变量以显示最新的自增长ID...TEXT); #删除触发器 DROP TRIGGER delete_genre; #添加触发器 CREATE TRIGGER delete_genre AFTER DELETE ON genre FOR

1.4K40

MySQL高级篇-慎用的触发器

MySQL中的触发器 1.触发器概述   MySQL从 5.0.2 版本开始支持触发器MySQL触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。   ...2.触发器创建 2.1 语法结构 我们来看下触发器的创建的语法结构: CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名...BEFORE|AFTER :表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发。 INSERT|UPDATE|DELETE :表示触发的事件。...SELECT * FROM information_schema.TRIGGERS; 3.2 删除触发器 触发器也是数据库对象,删除触发器也用DROP语句,语法格式如下: DROP TRIGGER IF...触发器可以帮助我们记录操作日志 触发器还可以用在操作数据前,对数据进行合法性检查 缺点: 触发器最大的一个问题就是可读性差。 相关数据的变更,可能会导致触发器出错. 尽量少去使用触发器,不建议使用!

2K20

MySQL中一个文档疏漏的分析测试

最近看到Percona的工程师Agustín写了一篇博客,是关于MySQL触发器和可更新视图的一个观点,具体链接可以参考 https://www.percona.com/blog/2017/06/14/...大体的翻译就是:MySQL触发器仅由SQL语句对表级触发,视图不可以,API级别的表级操作也不会触发。 这个描述看起来没什么问题,毕竟触发器是确实存在于具体的表上的,由表来触发听起来无可厚非。...* FROM main_table; 然后创建3个触发器,分别对应insert,update,delete操作 CREATE TRIGGER trigger_after_insert after INSERT...FROM view_main_table WHERE id = 6; 语句运行后的结果如下: [test]> select *from main_table; +----+----------+--...所以说,社区共享也有很多种方式,对技术保持好奇心是学习进步的永恒动力。

67990

Mysql高级8-触发器

一、触发器   触发器是与表有关的数据库对象,指在insert/update/delete之前或者之后,触发并执行触发器中定义的sql语句集合,触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录...三、触发器语法   3.1 创建语法 create trigger trigger_name before/after insert/update/delete on tb_name for each...中的语句终止符由“;” 改为“&”,原因是,触发器中有完整的sql语句,会包含分号,如果不改,怎无法在终端中书写完整的触发器语句   4.4 查看创建的触发器 mysql> delimiter ; mysql...  5.1 创建修改数据触发器 mysql>delimiter & mysql> create trigger student_update_trigger after update on student...  6.1 创建删除数据触发器 mysql>delimiter & mysql> create trigger student_delete_trigger after delete on student

24730

MySQL触发器的使用

触发器触发器的使用场景以及相应版本: 触发器可以使用的MySQL版本: 版本:MySQL5以上 使用场景例子: 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否大写 每当订购一个产品时...: #newproduct 触发器的名字 CREATE TRIGGER newproduct 触发的时机: BEFORE:触发器在触发他们的语句之前触发 AFTER触发器在触发他们的语句完成后触发...在这里我们使用的after;也就是在插入结束后触发条件; DECLARE msg VARCHAR(100); 注意:declare语句是在复合语句中声明变量的指令;如果不声明msg,执行语句时,MySQL...触发器: 在DELETE触发器delete语句执行之前或之后执行: 在delete触发器代码内,可以引用OLD的虚拟表,访问被删除的行; OLD中的值全部都是只读,不能更新 例子: 使用old保存将要被删除的行到一个存档表中...to return a result set from a trigger” 原因:因为从MySQL5以后不支持触发器返回结果集 解决方法:在后面语句后面添加 into @变量名 取数据:select

3.2K10

第十章《触发器

触发器(trigger)是一个特殊的存储过程,都是嵌入到mysql的一段程序,触发器是由事件来出发某个操作,触发器涉及到sql语句是DML(insert、update、delete)。...触发器触发的操作里面可以是单条sql语句也可以是多条sql语句的集合,不需要手动启动,只要当一个预定义事件发生,就会被mysql自动调用执行预先定义好的操作。...简单理解:你执行一条sql语句,这条sql语句的执行会自动触发执行其他的sql语句 创建触发器的四个要素: (1)监视地点:(table) (2)监视事件:(insert、update、delete...) (3)触发时间:(before/after) (4)触发事件:(insert、update、delete) 创建触发器的语法: create trigger 触发器名 触发时间(before/...after) 触发事件(insert、update、delete) on 表名 for each row 要执行的SQL语句(单个SQL语句/begin 多个SQL语句 end); delimiter

23230

MySQL触发器介绍

参考上面创建语句触发器创建有几点要素,下面简要说明下: trigger_time:是触发动作时间,可以是 BEFORE 或 AFTER ,表示触发器在要修改的每一行之前或之后激活。...例如 insert 、load data、replace 语句。 update:更改表中某一行数据时激活触发器。例如 update 语句delete:从表中删除某一行数据时激活触发器。...例如 delete 和 replace 语句。...表上的 DROP TABLE 和 TRUNCATE TABLE 语句不会激活此触发器,因为它们不使用 delete ,删除分区也不会激活 delete 触发器。...大量使用触发器容易导致代码结构被打乱,增加了程序的复杂性, 如果需要变动的数据量较大时,触发器的执行效率会非常低。 触发器隐式调用容易被忽略,出现问题不好排查。

3.8K20

第十章《触发器

触发器(trigger)是一个特殊的存储过程,都是嵌入到mysql的一段程序,触发器是由事件来出发某个操作,触发器涉及到sql语句是DML(insert、update、delete)。...触发器触发的操作里面可以是单条sql语句也可以是多条sql语句的集合,不需要手动启动,只要当一个预定义事件发生,就会被mysql自动调用执行预先定义好的操作。...简单理解:你执行一条sql语句,这条sql语句的执行会自动触发执行其他的sql语句 创建触发器的四个要素: (1)监视地点:(table) (2)监视事件:(insert、update、delete...) (3)触发时间:(before/after) (4)触发事件:(insert、update、delete) 创建触发器的语法: create trigger 触发器名 触发时间(before/...after) 触发事件(insert、update、delete) on 表名 for each row 要执行的SQL语句(单个SQL语句/begin 多个SQL语句 end); delimiter

17450

第十章《触发器

触发器(trigger)是一个特殊的存储过程,都是嵌入到mysql的一段程序,触发器是由事件来出发某个操作,触发器涉及到sql语句是DML(insert、update、delete)。...触发器触发的操作里面可以是单条sql语句也可以是多条sql语句的集合,不需要手动启动,只要当一个预定义事件发生,就会被mysql自动调用执行预先定义好的操作。...简单理解:你执行一条sql语句,这条sql语句的执行会自动触发执行其他的sql语句 创建触发器的四个要素: (1)监视地点:(table) (2)监视事件:(insert、update、delete...) (3)触发时间:(before/after) (4)触发事件:(insert、update、delete) 创建触发器的语法: create trigger 触发器名 触发时间(before/...after) 触发事件(insert、update、delete) on 表名 for each row 要执行的SQL语句(单个SQL语句/begin 多个SQL语句 end); delimiter

15620

MySQL基础-变量流程控制游标触发器

这样一来,就不用担心因为忘记添加库存数据而导致的数据缺失了 1、触发器概念 MySQL从 5.0.2 版本开始支持触发器。...MySQL触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序 触发器是由 事件来触发 某个操作,这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。...2、触发器使用 创建触发器: CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块...; 表名 :表示触发器监控的对象 BEFORE|AFTER :表示触发的时间,BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发 INSERT|UPDATE|DELETE :表示触发的事件...2、相关数据的变更,可能会导致触发器出错

1.4K30
领券