PHP MySQL将数据插入到多个表中
问题描述:
我正试图制作一个最小化冗余数据的实验性Web应用程序。 我已成立了像这样三个示例表:PHP MySQL将数据插入到多个表中
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是否有任何允许插入查询被拆分的内置逻辑?触发器能够处理这种类型的事务,还是超出了它的能力?
任何意见,想法或想法将不胜感激。
谢谢!
答
解决方案将使用Transactions,它允许获得“全部或全部”行为。
的想法是这样的:
- 你开始交易
- 你做你的插入/更新
- ,如果一切正常,您提交事务;这将节省您在此次交易中所做的一切
- 如果不是,则回滚事务;你在其中做的所有事情都将被取消。
- 如果您没有提交并断开连接(如果您的PHP脚本死亡,例如),则不会提交任何内容,并且您在未提交的事务期间所做的操作将自动回滚。
欲了解更多信息,你可以看看12.4.1. START TRANSACTION, COMMIT, and ROLLBACK Syntax,MySQL的。
注意交易仅适用于某些DB引擎:
答
对于多个插入,您可以创建一个过程,并在PHP上调用该过程。
您意识到,当用户将标题更改为2+次时,您无法确定哪个是原始的?页面变得越来越糟......它也会人为地夸大你的数据,存储档案版本 - 这是可以的,假设你想支持恢复到以前的版本。 – 2009-10-17 18:54:23