我遇到問題了! 我有一個附件表。我在此表中存儲文件名。我的分類表和附件有關係,如果一個分類刪除,附件上的相關記錄也被刪除了,但我想從附件中獲取文件名,然後刪除它!mysql刪除前取得字段值
我該怎麼辦?
DELETE c, a category c
JOIN attachment a ON c.id = a.extId
WHERE c.lft BETWEEN @left AND @right
我希望得到的文件名值(附件字段)之前將其刪除在上面查詢
我遇到問題了! 我有一個附件表。我在此表中存儲文件名。我的分類表和附件有關係,如果一個分類刪除,附件上的相關記錄也被刪除了,但我想從附件中獲取文件名,然後刪除它!mysql刪除前取得字段值
我該怎麼辦?
DELETE c, a category c
JOIN attachment a ON c.id = a.extId
WHERE c.lft BETWEEN @left AND @right
我希望得到的文件名值(附件字段)之前將其刪除在上面查詢
刪除查詢不返回值的,所以我建議你先進行簡單的SELECT語句來獲取文件名。然後繼續刪除語句。
執行兩個查詢,第一個具有相同join
和where
和第二你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
創建觸發器
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 ;
這觸發條件會after
每delete
從附件中刪除的for each row
將向表「deleted_attachments」添加一行。
有觸發器BEFORE
和AFTER
任何操作。
該動作可以是DELETE
,INSERT
,UPDATE
。 更改前的值可以通過使用old
虛擬表來訪問。可以使用new
虛擬表訪問更改後的值。 這裏我用了old
的值,因爲delete
顯然沒有new
的值。
欲瞭解更多有關觸發器看到:
http://dev.mysql.com/doc/refman/5.1/en/triggers.html
或爲mysql triggers
搜索計算器。