我正在尝试制作一个实验性 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 是否有任何允许拆分插入查询的内置逻辑?触发器是否能够处理这种类型的事务,或者它是否超出了它的能力?
如有任何建议、想法或想法,我们将不胜感激。
谢谢!
最佳答案
一个解决方案是使用 Transactions ,这允许获得“全有或全无”行为。
思路如下:
- 您开始交易
- 你做你的插入/更新
- 如果一切正常,您提交交易;这将保存您在此交易期间所做的一切
- 如果不是,则回滚事务;你在其中所做的一切都将被取消。
- 如果您不提交并断开连接(例如,如果您的 PHP 脚本终止),则不会提交任何内容,并且您在未提交事务期间所做的操作将自动回滚.
更多信息,您可以查看12.4.1. START TRANSACTION, COMMIT, and ROLLBACK Syntax , 用于 MySQL。
请注意,事务仅适用于某些数据库引擎:
关于PHP MySQL向多个表插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582834/