删除和外键约束SQL

时间:2016-07-07 09:42:34

标签: sql foreign-keys

我有一个项目表有一个主键“projectID”,每个项目都有任务然后在我的任务表中有一个主键“taskID”,我有外键“ProjetID”。

我想知道,如果删除项目,是否有可能在此项目中执行的任务仍保留在任务表中,并且不会被删除。

2 个答案:

答案 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,对于有效的数据库状态,某些事情是正确的。 (因此它可以阻止无效状态并优化查询。)