我的查询有问题。我有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


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

最佳答案

这里最重要的问题是关于业务逻辑。没有类别的订单有意义吗?如果是,则可以在删除类别时在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 ;

09-11 05:54
查看更多