我正在使用symfony 4,当我在表之间进行链接时,会创建索引。我不明白它们是如何工作的。
它们的目的是什么,为什么不可能将数据文件导入到这些文件中。 即使存在约束(不破坏索引),是否可以“绕过”此mysql限制并将数据文件导入mysql?
谢谢
答案 0 :(得分:1)
Mysql FOREIGN KEY用于数据完整性。那么发生的是您有一个外键,该外键引用了另一个表中的列。这是一种链接表之间数据关系的方法
在使用Import时,如果另一个表中不存在该键,则mysql import将引发错误。
如果删除FOREIGN KEY标志,则可以导入该表
关于外键
答案 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