2011-04-16 68 views
0

我遇到問題了! 我有一個附件表。我在此表中存儲文件名。我的分類表和附件有關係,如果一個分類刪除,附件上的相關記錄也被刪除了,但我想從附件中獲取文件名,然後刪除它!mysql刪除前取得字段值

我該怎麼辦?

DELETE c, a category c 
    JOIN attachment a ON c.id = a.extId 
WHERE c.lft BETWEEN @left AND @right 

我希望得到的文件名值(附件字段)之前將其刪除在上面查詢

回答

1

刪除查詢不返回值的,所以我建議你先進行簡單的SELECT語句來獲取文件名。然後繼續刪除語句。

1

執行兩個查詢,第一個具有相同joinwhere和第二你delete查詢select

SELECT attachment.filename 
FROM attachment AS a 
JOIN category AS c ON c.id = a.extId 
WHERE c.lft BETWEEN @left AND @right 
3

創建觸發器

DELIMITER $$ 

CREATE TRIGGER ad_attachment_each AFTER DELETE ON attachment FOR EACH ROW 
BEGIN 
    INSERT INTO deleted_attachments (id, attachment_id, filename, timestamp) 
    VALUES (null, old.id, old.filename, NOW()); 
END$$ 

DELIMITER ; 

這觸發條件會afterdelete從附件中刪除的for each row將向表「deleted_attachments」添加一行。

有觸發器BEFOREAFTER任何操作。
該動作可以是DELETEINSERT,UPDATE。 更改前的值可以通過使用old虛擬表來訪問。可以使用new虛擬表訪問更改後的值。 這裏我用了old的值,因爲delete顯然沒有new的值。

欲瞭解更多有關觸發器看到:
http://dev.mysql.com/doc/refman/5.1/en/triggers.html

或爲mysql triggers搜索計算器。