2014-10-31 29 views
0

我的查詢有問題。我有兩張關係表。MySQL在刪除時設置默認字段值

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 

我的問題是如何設置類別名稱,如果其中一個類別已刪除。

+0

它設置的是什麼?什麼時候被刪除?您可能希望在應用程序代碼中執行此操作,而不是純粹在數據庫中執行此操作,但如果您足夠瘋狂以便這樣做,則需要設置觸發器。 – tadman 2014-10-31 16:27:46

+0

@tadman將默認值設置爲'n/a',當類別從表類別中刪除時 – 2014-10-31 16:29:06

+1

categrory.categoryId和order.categoryId之間是否有適當的外鍵?順便說一下,訂單是一個表的壞名字(訂單是一個保留字)。 – 2014-10-31 16:29:19

回答

0

這裏最重要的問題是關於業務邏輯。沒有類別的訂單是否有意義?如果是,則可以在刪除類別時在orders表中設置categoryIdnull。你可以使用觸發器。

但是一個更好的解決辦法是enabled列添加到您的類別和而不是刪除一個類別只需要設定其enabledfalse - 這使得它不能用於進一步選擇還保留了以前的信息/關係。當然,這需要在類別被選擇用於呈現的地方進行小的改變,即向查詢添加where enabled=true

如果你在命令刪除類別,設置類別ID爲空集,那麼你要尋找的語法是

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 ;