我有两种不同的文件。一个是按文件夹组织的。另一个是由客户组织的。这是mysql中的表结构:
Table docs
ID
title
Table folderDocs
docID -> docs(ID)
folderID -> folders(ID) ON DELETE CASCADE
Table clientDocs
docID -> docs(ID)
clientID -> clients(ID) ON DELETE CASCADE
我正在寻找一种删除文件夹或客户端时自动删除文档的优雅方法。上述级联规则并没有完全实现这一点。 (即folderDocs中的行将被删除,但文档中的相应行将保留。)
无论如何使用级联规则或其他方法在mysql中设置它,以便当通过级联删除来自folderDocs或clientDocs的行时,文档中的相应行也会被删除? (我希望避免首先以编程方式删除文档,然后删除文件夹/客户端。)
先谢谢你的帮助。
答案 0 :(得分:0)
我认为你不能在直接的SQL中做到这一点。您可能需要编写存储过程来执行此操作。
但这是个好主意。你的表的设计方式使它看起来像一个多对多的关系。如果仍然从另一个文件夹中引用文档,你可以删除文档吗?
如果它们被认为是一对多的关系,则文件夹和客户端的外键应该在doc中,而不是表格本身。然后你可以使用级联删除。
编辑:您可以尝试使用触发器。 http://dev.mysql.com/doc/refman/5.0/en/triggers.html
但它仍然需要写一些代码(以触发器的形式)
答案 1 :(得分:0)
假设每个文档必须属于文件夹或客户端,那么您可能希望设置一个计划清理作业,以使用下面的查询删除所有没有文件夹和客户端的文档
DELETE FROM docs USING docs
LEFT JOIN clientDocs c ON (c.docid = docs.id)
LEFT JOIN folderDocs f ON (f.docid = docs.id)
WHERE ISNULL(c.clientid) AND ISNULL(f.folderid)