当if(!isInt(compressDuration.trim())) {
System.out.println("The compressDuration has no value or a ");
} else{
}
public boolean isInt(String str) {
try{
int num = Integer.parseInt(str);
// is an integer!
} catch (NumberFormatException e) {
// not an integer!
return false;
}
return true;
}
和orders
设置为user_id
时,我创建了一个从restaurant_id
删除行的触发器。
null
delimiter //
create trigger order_delete
before update on orders
for each row
if new.user_id is null and new.restaurant_id is null then
delete from orders where order_id = new.order_id;
end if;
//
delimiter ;
和user_id
是来自其他两个表的外键,当从各自的表中删除它们时将设置为null。但是,当我尝试从表中删除它时,它不会执行触发器。所以我的订单表中仍然有两个restaurant_id
和user_id = NULL
的订单。有谁知道为什么我的触发器没有触发?
答案 0 :(得分:1)
正如foreign keys上的MySQL文档所说:
级联外键操作不会激活触发器
因此,没有你创建的触发器,当通过级联将值设置为null时,不会调用它。
如果您只想删除记录,如果两个字段都设置为null,那么您必须从应用程序代码执行此操作,您不能依赖数据库自动化。
请注意:您不应该删除系统中的订单,因为它们是您的财务交易的基础,您可能会遇到税务机关和外部财务审计师的麻烦。
答案 1 :(得分:-1)
您希望在user_id
和restaurant_id
设置为NULL
时触发该触发器吗?
在这种情况下,您应该使用:
delimiter //
create trigger order_delete
after update on orders
for each row
if new.user_id is null and new.restaurant_id is null then
delete from orders where order_id = new.order_id;
end if;
//
delimiter ;
使用关键字after
代替before
表示在字段设置为null
后触发器将被触发。使用before
时,user_id
和restaurant_id
仍有其先前值时会触发触发器。在这种情况下,if
语句中的条件永远不会成立。