了解MYSQL中的外键约束

时间:2014-07-02 17:01:31

标签: mysql foreign-keys constraints

我真的很难理解外键是如何工作的,尽管我可以看到它们是一个非常有用的工具。

我有一个名为seasons的表,其中包含一列season_id,它是主键。还有一些其他专栏。

我有一个名为dates的第二个表,其中包含名为hiddateseason_id(以及其他一些)的列。主键包含hiddateseason_id具有外键约束ON DELETE SET NULLON UPDATE CASCADE

这是否意味着如果我删除dates中的行,season_idnull设置为seasons?或者反过来?

我需要做的是,当我删除dates中的行时,seasons不受影响。但是,如果我在seasons中删除了一行,season_id应设置为null中的dates

2 个答案:

答案 0 :(得分:1)

反过来说。外键定义依赖关系:season_id中的dates必须引用seasons中的现有行。因此,如果seasons中有任何引用它的行,则您无法删除dates中的行。 ON DELETE选项指定如果您删除该行,则会使用NULL替换对该行的引用,以维持此要求。

所以你需要发生什么。

答案 1 :(得分:0)

基本定义是:外键是跨表的交叉引用相关数据。

在您的情况下,您拥有表seasons,其中包含以下数据(此处为猜测)和表months。外键是season表月可以有一个ON DELETE CASCADE子句,它将DELETE操作应用于受删除季节影响的记录。因此,如果您删除表seasons上的 Winter ,将删除具有相应外键 1 的记录,我们将失去圣诞节。

    season_id --- season_name || month_id --- season --- month_name
       1      --- Winter      ||    1     ---   1          January
       2      --- Spring      ||    ...
       3      --- Summer      ||    7     ---   3          July 
       4      --- Autumn      ||    8     ---   4          September