更新: “将 foreign_key_checks 设置为 1 不会触发对现有表数据的扫描。因此,不会验证在 foreign_key_checks = 0 时添加到表中的行的一致性。” 资料来源:5.1.4。服务器系统变量——foreign_key_checks——因此,关闭 foreign_key_checks 似乎不是一个选项......
需要将具有 100,000+ 条记录的单个文件中的数据加载到 MySQL 上的多个表中,维护文件/表中定义的关系;表示关系已经匹配。该解决方案应该适用于最新版本的 MySQL,并且可以使用 InnoDB 或 MyISAM 引擎。
我对这一切完全陌生,并且几乎没有自动生成 ID 和建立外键关系的经验。任何指针将不胜感激。
请参阅上面的更新说明: 我可能会补充说,不需要在实时数据库上进行更新,这意味着可以禁用外键约束,然后执行插入,再次启用约束。由于我的理解是,如果数据库的引用完整性出现问题,操作将失败。
所有方法都应该包括一些验证和回滚/清理策略,以防插入失败或无法保持引用完整性。
再次,对此完全陌生,并尽我所能提供尽可能多的信息,如果您有任何问题或要求澄清 - 请告诉我。
谢谢!
样本数据:为了更好地举例说明,假设我正在尝试加载一个文件,其中包含员工姓名、他们过去占用的办公室以及他们的职位历史记录,由选项卡分隔。
文件:
EmployeeName<tab>OfficeHistory<tab>JobLevelHistory
John Smith<tab>501<tab>Engineer
John Smith<tab>601<tab>Senior Engineer
John Smith<tab>701<tab>Manager
Alex Button<tab>601<tab>Senior Assistant
Alex Button<tab>454<tab>Manager
注意:单表数据库是完全规范化的(与单表一样多)——例如,在“John Smith”的情况下,只有一个 John Smith;这意味着没有会导致参照完整性冲突的重复项。
MyOffice
数据库模式具有以下表:
Employee (nId, name)
Office (nId, number)
JobTitle (nId, titleName)
Employee2Office (nEmpID, nOfficeId)
Employee2JobTitle (nEmpId, nJobTitleID)
如何使用 MySQL 将文件加载到上面的架构中为员工、办公室和职位自动生成 ID 并维护员工和办公室以及员工和职位之间的关系?
所以在这种情况下。表格应如下所示:
Employee
1 John Smith
2 Alex Button
Office
1 501
2 601
3 701
4 454
JobTitle
1 Engineer
2 Senior Engineer
3 Manager
4 Senior Assistant
Employee2Office
1 1
1 2
1 3
2 2
2 4
Employee2JobTitle
1 1
1 2
1 3
2 4
2 3