簡體   English   中英

PHP MySQL將數據插入多個表

[英]PHP MySQL inserting data to multiple tables

我正在嘗試制作一個實驗性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。 適用於MySQL的START TRANSACTION,COMMIT和ROLLBACK語法


請注意,事務僅適用於某些數據庫引擎:

  • MyISAM不支持交易
  • InnoDB 支持(例如,它還支持外鍵-它比MyISAM先進得多)

對於多個插入,您可以創建一個過程,然后在PHP上調用該過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM