PHP MySQL将数据插入多个表

Dan*_*Dan 0 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

任何建议,想法或想法将不胜感激.

谢谢!

Pas*_*TIN 6

解决方案是使用事务,它允许"全有或全无"行为.

这个想法如下:

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

有关更多信息,您可以查看12.4.1.用于MySQL的START TRANSACTION,COMMIT和ROLLBACK语法.


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

  • MyISAM不支持交易
  • InnoDB做的(例如它也支持外键 - 它比MyISAM更先进).