我有一个项目表有一个主键“projectID”,每个项目都有任务然后在我的任务表中有一个主键“taskID”,我有外键“ProjetID”。
我想知道,如果删除项目,是否有可能在此项目中执行的任务仍保留在任务表中,并且不会被删除。
答案 0 :(得分:1)
在删除项目之前,您需要将ProjetID设置为null。无论如何都要保留它是没有意义的,因为你再也找不到任何项目了。
您可以使用ON DELETE SET NULL
,这样做无需执行其他SQL语句。
答案 1 :(得分:0)
FOREIGN KEY声明告诉DBMS,其列的子行的非NULL值也必须作为其列的子行的值出现在REFERENCES表中。如果这是你想要的,请声明它。如果这不是你想要的,那就不要。
你说任务有FOREIGN KEY Task (projectID) REFEFERENCES Project (projectID)
。但是你矛盾地说你想在Task中有一个projectID值,即使它不是Project中的projectID值。因为如果那就是你想要的那么你不想要外键。所以不要声明。
我们不需要声明外键,主键,唯一或其他约束来进行查询。他们只是告诉DBMS,对于有效的数据库状态,某些事情是正确的。 (因此它可以阻止无效状态并优化查询。)