我有问题! 我有一张附件表。我在这个表中存储文件名。我的类别表和附件有关联,如果类别删除,附件中的相关记录也被删除但我想在删除它之前从附件中获取文件名!
我该怎么办?
DELETE c, a category c
JOIN attachment a ON c.id = a.extId
WHERE c.lft BETWEEN @left AND @right
我希望在顶级查询
中删除之前获取文件名值(附件字段)答案 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”中添加一行。
有触发器BEFORE
和AFTER
任何动作
操作可以是DELETE
,INSERT
,UPDATE
。
可以使用old
虚拟表访问更改前的值。可以使用new
虚拟表访问更改后的值。
在这里,我使用了old
值,因为delete
显然没有new
值。
有关触发器的更多信息,请参阅:
http://dev.mysql.com/doc/refman/5.1/en/triggers.html
或者搜索mysql triggers
的堆栈溢出。
答案 1 :(得分:2)
执行两个查询,第一个是select
join
和where
,第二个是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语句来获取文件名。然后继续删除语句。