Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中FK约束使用的最佳语句?_Mysql_Database - Fatal编程技术网

MySQL中FK约束使用的最佳语句?

MySQL中FK约束使用的最佳语句?,mysql,database,Mysql,Database,对于FK,我应该始终在DELETE CASCADE上的UPDATE CASCADE上插入此语句,还是应该在DELETE SET NULL上的UPDATE CASCADE上插入此语句 我有很多查找,让我们从大陆到国家到州到城市再到社区,或者从行业到公司再到品牌再到当地商店,其中子价值取决于父价值。还有一些FK表(如系统代码),它们具有其他表使用的代码值,但与子表没有直接关系 所以我不知道该使用哪个FK语句。我的目标是: 如果父级死亡,则不会丢失子级数据。 在表之间跳转时连接较少或没有连接。 不删除

对于FK,我应该始终在DELETE CASCADE上的UPDATE CASCADE上插入此语句,还是应该在DELETE SET NULL上的UPDATE CASCADE上插入此语句

我有很多查找,让我们从大陆到国家到州到城市再到社区,或者从行业到公司再到品牌再到当地商店,其中子价值取决于父价值。还有一些FK表(如系统代码),它们具有其他表使用的代码值,但与子表没有直接关系

所以我不知道该使用哪个FK语句。我的目标是:

如果父级死亡,则不会丢失子级数据。 在表之间跳转时连接较少或没有连接。 不删除任何数据。 确保如果我更新一个表,则所有子表、孙子表、曾孙表等都会自动更新。
我通常避免级联,并将它们限制在真正需要的地方。你不打算删除一个大陆,是吗? 假设我们有一个经典样本:

客户->订单->订单详细信息 系列->产品->订单详细信息 我不允许任何级联,除了可能对订单->订单详细信息进行级联删除,并且只有当业务部门表示可以删除订单时才允许,这是不确定的。
但是,我会在Products表中有一个PhasedOut date字段,以允许产品从目录中消失,但保留在数据库中,这是客户的想法:客户可能消失,但仍保留在数据库中。

因此,仅当我希望子项更新或删除时才使用Cascade?如果我不使用cascade,则即使父项死亡,子项也会保持原样?如果不使用cascade并尝试删除父项,则会出现错误,除非没有子项,这很好。引用完整性是为了避免孤立。