MySQL在删除时设置默认字段值

时间:2014-10-31 16:24:18

标签: mysql sql

我的查询有问题。我有2张关系表。

  table category
  CategoryId       name   
      1          category1
      2          category2


  table order
  orderId          CategoryId             date         Description
     1                 2               2014-10-10         okay
     2                 1               2014-10-10         okay2
     3                 1               2014-10-10         okay3

我的问题是如果其中一个类别已删除,如何设置categoryname。

1 个答案:

答案 0 :(得分:0)

这里最重要的问题是关于业务逻辑。没有类别的订单是否有意义?如果是,那么您可以在删除类别时将categoryId设置为null表中的orders。您可以使用触发器。

然而,更好的解决方案是在您的类别中添加enabled列,而不是删除某个类别,只需将其enabled设置为false - 这使其无法进行进一步选择但保留以前的信息/关系。当然,这需要在选择要显示的类别的位置进行少量更改,即向查询添加where enabled=true

如果您在订单中将类别和设置类别ID设置为null,那么您要查找的语法是

DELIMITER //

CREATE TRIGGER category_before_delete
BEFORE DELETE ON category FOR EACH ROW
BEGIN
   UPDATE `order` SET categoryid=null WHERE categoryid=OLD.categoryid;
END; //

DELIMITER ;