Mysql 需要一些关于外键约束的解释吗

Mysql 需要一些关于外键约束的解释吗,mysql,symfony,Mysql,Symfony,我使用的是symfony4,当我在表之间创建链接时,会创建索引。我不明白它们是如何工作的 它们的用途是什么?为什么不可能将数据文件导入这些文件。 即使存在约束(不破坏索引),是否可以“绕过”此mysql限制并将数据文件导入mysql 谢谢Mysql外键用于数据完整性。所以发生的事情是,您有一个外键,它引用另一个表中的列。这是链接表之间数据关系的一种方式 当使用Import时,如果另一个表中不存在该键,mysql导入将抛出错误 如果删除外键标志,则可以导入该表 指 在外键上,MySQL是一个关系

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

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


谢谢

Mysql外键用于数据完整性。所以发生的事情是,您有一个外键,它引用另一个表中的列。这是链接表之间数据关系的一种方式

当使用Import时,如果另一个表中不存在该键,mysql导入将抛出错误

如果删除外键标志,则可以导入该表


在外键上,MySQL是一个关系数据库系统。如果两个表之间存在关系,那么这是有原因的。想想你在Symfony中的实体。如果一个实体(主实体)具有多个相关实体,并且这些相关实体只能在存在主实体时存在,则必须存在约束以防止孤立记录

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

要防止在没有公司的情况下创建部门,您不能在部门表中插入不引用公司表中记录的行

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

您不应该删除外键约束,而应该首先将数据导入引用的表(评分?),然后更新导入的数据以包含引用主表的正确ID


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

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

您可以为导入临时执行哪些操作

使用外键检查

在导入运行之前

SET FOREIGN_KEY_CHECKS=0;
当它完成的时候

SET FOREIGN_KEY_CHECKS=1;

使用禁用键:

导入完成后:

ALTER TABLE table_name ENABLE KEYS;
当然,您必须更改表名

ALTER TABLE table_name ENABLE KEYS;