mysql在删除之前获取字段值

时间:2011-04-16 17:47:15

标签: mysql sql sql-delete

我有问题! 我有一张附件表。我在这个表中存储文件名。我的类别表和附件有关联,如果类别删除,附件中的相关记录也被删除但我想在删除它之前从附件中获取文件名!

我该怎么办?

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

我希望在顶级查询

中删除之前获取文件名值(附件字段)

3 个答案:

答案 0 :(得分: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 ;

此触发器会触发after每个从附件中删除的delete for each row,并会在表“deleted_attachments”中添加一行。

有触发器BEFOREAFTER任何动作 操作可以是DELETEINSERTUPDATE。 可以使用old虚拟表访问更改前的值。可以使用new虚拟表访问更改后的值。 在这里,我使用了old值,因为delete显然没有new值。

有关触发器的更多信息,请参阅:
http://dev.mysql.com/doc/refman/5.1/en/triggers.html

或者搜索mysql triggers的堆栈溢出。

答案 1 :(得分:2)

执行两个查询,第一个是select joinwhere,第二个是delete查询:

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

答案 2 :(得分:1)

删除查询不返回值,因此我建议您事先执行一个简单的select语句来获取文件名。然后继续删除语句。