MySQL 5.6 if与end if在触发器中的使用
2014-07-08 11:07
639 查看
BEGIN #Step 1: Delete product_company by [company_id] set @count = (select count(*) from product_info where company_id = old.company_id); if @count = 0 then delete from product_company where company_id = old.company_id; set @Comp = 'drop company'; else set @Comp = 'keep it'; #Step 2: Delete product_sn by [product_id], 1:1, no judegment delete from product_sn where product_id = old.product_id; end if; END
上面的代码,主要是两部分,第一部分:从product_company表中删除记录;第二部分:从product_sn表中删除记录,并且第二部分是一对一关系,必须进行删除,不需要判断,从代码中很容易就能看出来。
但实际情况是第一部分的执行了,而第二部分的删除没有执行,怎么回事呢?
仔细一看,原来两个部分放在了同一个if-else块中,因为第一个条件中,@count确实等于0,所以就执行了if分支,而调过了else分支,而恰巧第二部分的语句放在了这个else分支中,因此无法执行。
修改的方法很简单,把第二部分的语句拿出来,放在end if后面即可,也就是和第一部分的if-else块相互独立。
BEGIN
#Step 1: Delete product_company by [company_id]
set @count = (select count(*) from product_info where company_id = old.company_id);
if @count = 0 then
delete from product_company where company_id = old.company_id;
set @Comp = 'drop company';
else
set @Comp = 'keep it';
end if;
#Step 2: Delete product_sn by [product_id], 1:1, no judegment
delete from product_sn where product_id = old.product_id;
END
相关文章推荐
- MySQL 5.6 if与end if在触发器中的使用
- MySQL5.6 触发器的使用(条件分支、变量的使用)
- mysql_触发器、函数、if的使用
- MySQL5.6 触发器的使用(条件分支、变量的使用)
- 触发器、存储过程的使用(针对Mysql)
- MySQL触发器如何正确使用
- mysql中触发器的使用详解
- mysql中使用触发器
- mysql中触发器和存储过程的if-else中的子句不能为空
- MySQL 5.6 root密码丢失,使用mysqld --skip-grant-tables
- mysql 5.5.28 DIV整除 date取日期 ifnull为空判读 一起使用出现的奇葩现象
- MySQL触发器的使用
- Mysql中的触发器简单介绍及使用案例
- [MySQL 5.6] MySQL 5.6 online ddl 使用、测试及关键函数栈
- 【MySQL函数】MYSQL IFNULL和IF函数的使用
- mysql触发器的使用和语法
- MySQL存储过程和触发器使用释疑
- Mysql 触发器的使用
- mysql 触发器的使用
- MySQL触发器(TRIGGER)使用说明