PHP MySQL将数据插入多个表

时间:2009-10-17 18:10:36

标签: php mysql database insert

我正在尝试制作一个实验性的Web应用程序,以最大限度地减少冗余数据。 我有三个示例表设置如下:

Table one
ID | created_at (unix timestamp) | updated_at (unix timestamp)

Table two
ID | Foreign Key to table one | Title

Table three (pages)
ID | Foreign Keys to both table one and two | Content | Metadata

这个想法是在应用程序中创建的所有内容都有创建/编辑时间。

许多(但不是全部)事物都会有标题(例如页面或页面的部分)。

最后,有些东西会有自己特有的属性,例如页面的内容和元数据。

我正在尝试找出将数据输入多个表格的最佳方法。我知道我可以从PHP执行多个插入查询,跟踪当前事务中创建的行,并在事务的后续部分失败时删除这些行。但是,如果PHP脚本完全死亡,它可能会在所有删除完成之前停止。

MySQL是否有任何内置逻辑允许插入查询被拆分?触发器能够处理这种类型的事务还是超出其能力?

非常感谢任何建议,想法或想法。

谢谢!

2 个答案:

答案 0 :(得分:6)

解决方案是使用Transactions,这样可以获得“全有或全无”的行为。

这个想法如下:

  • 您开始交易
  • 进行插入/更新
  • 如果一切正常,你提交交易;这将保存您在此交易中所做的一切
  • 如果没有,则回滚事务;你在其中所做的一切都将被取消。
  • 如果您没有提交并断开连接(例如,如果您的PHP脚本死亡),则不会提交任何内容,并且您在未提交的事务中所做的操作将自动回滚

有关更多信息,您可以查看12.4.1. START TRANSACTION, COMMIT, and ROLLBACK Syntax,了解MySQL。


请注意,事务仅适用于某些数据库引擎:

  • MyISAM不支持交易
  • InnoDB执行(例如,它也支持外键 - 它比MyISAM更先进)

答案 1 :(得分:1)

对于多个插入,您可以创建一个过程,在PHP上调用该过程。