Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将数据复制到另一个表并避免键冲突?_Php_Mysql_Database - Fatal编程技术网

Php 如何将数据复制到另一个表并避免键冲突?

Php 如何将数据复制到另一个表并避免键冲突?,php,mysql,database,Php,Mysql,Database,我正在用PHP/MySQL构建一个应用程序。它包含2个数据库。数据库1用于临时存储来自最终用户的订单。用户确认订单后,将使用SELECT…INSERT将订单复制到数据库2的2个表中。然后,数据库1中的表将被清理,以便用户可以使用新的顺序进行处理。换句话说,数据库1中的表在任何给定时间都不会持有超过1个订单。这两个表分别保存订单及其对应的项目。数据库1和数据库2中的表结构相同。当属于订单的项目被转移到数据库2中的表中时,会出现键冲突 问题1:解决这一关键冲突的最佳方式是什么 除了键之外,我尝试显式

我正在用PHP/MySQL构建一个应用程序。它包含2个数据库。数据库1用于临时存储来自最终用户的订单。用户确认订单后,将使用SELECT…INSERT将订单复制到数据库2的2个表中。然后,数据库1中的表将被清理,以便用户可以使用新的顺序进行处理。换句话说,数据库1中的表在任何给定时间都不会持有超过1个订单。这两个表分别保存订单及其对应的项目。数据库1和数据库2中的表结构相同。当属于订单的项目被转移到数据库2中的表中时,会出现键冲突

问题1:解决这一关键冲突的最佳方式是什么

除了键之外,我尝试显式地选择列,但这并不能完全解决问题。 最好使用INSERT从db1.table查询到db2.table SELECT*来传输此数据,而不必显式地提及所有列

此外,当用户希望在当前记录转储到数据库2中之后立即编辑它时,这是不可能的,因为数据库1和数据库2中的表无法链接。此外,该记录可以两次插入数据库2中

问题2:用户如何仍然编辑当前记录而不必退出菜单并在数据库2的表中查找记录

问题3:如何避免将同一条记录两次插入数据库2中的表中


由于项目采用模块化方法,因此选择了带有2个数据库的设计。此外,数据库2与数据库1分开,这意味着它们不能相互干扰。而且,由于数据库分为两部分,编写两个小数据块比编写一个大数据块更容易。

拥有两个数据库不是个坏主意

我将使用两个表之间的外键关系概念来处理这个问题。在将db1记录中的所有内容插入db2时,向db2添加一个新的外键字段,其中包含db1记录中的主键


通过这种方式,您可以读取db2上的记录,并使用db2_fkey将其重新关联到db1上的记录。您将能够确定记录已从db1中清除。此外,在db2上,db2_fkey字段中可以有多条具有相同值的记录。MySQL中有两个表之间的外键自动处理,您必须使用这种方法手动编码,比如从两个表中删除记录。但是这种关系方法应该可以回答您的应用程序问题。

为什么拥有两个数据库不是一个坏主意?在这种情况下,在任何给定时间,数据库1中只有1条记录。手动将2个数据库的所有变量链接到PHP代码不需要额外的工作吗?使用一个数据库不需要指向其他数据库的链接,对吗?更少的数据库=更少的努力?我同意1个数据库会更好。我假设项目的模块化方法使2数据库设计成为您的需求。2数据库不是一个坏主意,因为它仍然提供了一个可行的解决方案。是的,使用2个数据库会有更多的开销、冗余和设计/编码工作。但如果做得好,我建议的外键概念方法应该为问题1、2和3提供可靠的答案。谢谢你的评论,我喜欢思考数据库设计的挑战——祝你好运。