我真的很难理解外键是如何工作的,尽管我可以看到它们是一个非常有用的工具。
我有一个名为seasons
的表,其中包含一列season_id
,它是主键。还有一些其他专栏。
我有一个名为dates
的第二个表,其中包含名为hid
,date
和season_id
(以及其他一些)的列。主键包含hid
和date
。 season_id
具有外键约束ON DELETE SET NULL
和ON UPDATE CASCADE
。
这是否意味着如果我删除dates
中的行,season_id
将null
设置为seasons
?或者反过来?
我需要做的是,当我删除dates
中的行时,seasons
不受影响。但是,如果我在seasons
中删除了一行,season_id
应设置为null
中的dates
。
答案 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