需要一些有关外键约束的解释

时间:2019-11-02 22:42:38

标签: mysql symfony

我正在使用symfony 4,当我在表之间进行链接时,会创建索引。我不明白它们是如何工作的。

enter image description here

它们的目的是什么,为什么不可能将数据文件导入到这些文件中。 即使存在约束(不破坏索引),是否可以“绕过”此mysql限制并将数据文件导入mysql?

谢谢

3 个答案:

答案 0 :(得分:1)

Mysql FOREIGN KEY用于数据完整性。那么发生的是您有一个外键,该外键引用了另一个表中的列。这是一种链接表之间数据关系的方法

在使用Import时,如果另一个表中不存在该键,则mysql import将引发错误。

如果删除FOREIGN KEY标志,则可以导入该表

参阅MYSQL manual

关于外键

答案 1 :(得分:1)

MySQL是一个关系数据库系统。如果两个表之间存在关系,那是有原因的。想想您在Symfony中的实体。如果一个实体(一个主要实体)具有多个相关实体,并且只有在存在一个主要实体的情况下那些相关实体才能存在,则该约束必须存在以防止孤立记录。

例如: 考虑公司与部门之间的关系。公司可以有0个或多个部门,但部门只能作为公司的一部分存在。在这种情况下,部门表中的记录将引用公司表中的记录。但是,公司表中的记录在MySQL中不会直接引用除表中的任何记录。

为防止创建没有公司的部门,您不能在未引用公司表中记录的行中插入行。

要最终直接回答问题,您只能通过删除外键约束来导入不引用主表的数据(这不会破坏索引)。请记住,这可能会导致记录“孤立”并且不适合您要创建的业务模型。

除了删除外键约束之外,您应该首先将数据导入到引用表中(得分?),然后更新要导入的数据以包含正确的ID以引用主表。

根据提供的图像中的信息,导入文件中的每个记录的scoring_id值应等于(大概是)评分表中的id字段。如果还有其他数据可用于链接两个表,请使用该数据并适当地配置您的实体。

答案 2 :(得分:1)

外键将检查另一个表是否已经包含您要输入的元素。

您可以暂时进行导入

  

使用FOREIGN_KEY_CHECKS

导入之前

SET FOREIGN_KEY_CHECKS=0;

以及完成时间

SET FOREIGN_KEY_CHECKS=1;

  

使用禁用键:

ALTER TABLE table_name DISABLE KEYS;

以及导入完成后:

ALTER TABLE table_name ENABLE KEYS;

当然您必须更改table_name