更新:
“将外键检查设置为1不会触发对现有表数据的扫描。因此,当foreign_key_checks=0时添加到表中的行将不会验证一致性。”来源:5.1.4。服务器系统变量--
foreign_key_checks
——
因此,关闭外置钥匙检查似乎不是一个选项…
需要将一个记录超过100000条的单个文件中的数据加载到MySQL上的多个表中,以维护文件/表中定义的关系;这意味着关系已经匹配。解决方案应该在最新版本的mysql上工作,可以使用innodb或myisam引擎。
我对所有这些都是全新的,几乎没有自动生成ID和建立外键关系的经验。任何建议都会受到赞赏。
请参阅上面的更新说明:
我可能会补充说,在实时数据库上进行更新不是一项要求,这意味着可以禁用外键约束,然后执行插入,再次启用约束。由于我的理解是,如果数据库的引用完整性有问题,那么操作将失败。
所有的方法都应该包括一些来自验证的方法,并且在插入失败或未能保持引用完整性时,回滚/清除策略。
再次重申,这是全新的,我尽我所能提供尽可能多的信息,如果你有任何问题,或要求澄清-只要让我知道。
谢谢!
样本数据:
为了更详细地说明一个示例,假设我正在尝试加载一个包含员工姓名、他们过去占用的办公室以及由选项卡分隔的职务历史的文件。
文件:
EmployeeNameOfficeHistoryJobLevelHistory
John Smith501Engineer
John Smith601Senior Engineer
John Smith701Manager
Alex Button601Senior Assistant
Alex Button454Manager
注:
单表数据库是完全规范化的(尽可能多地是一个表),例如,在“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