2012-09-23 48 views
0

我想插入或更新,然後插入一個新的日誌到另一個表中。MySQL插入table1更新table2,子查詢或事務?

我運行一個漂亮的小查詢拉從一個臨時表到其他表的信息,像

插入 上的重複鍵更新選擇

我想沒有什麼做PHP或觸發器(主要開發人員不喜歡他們,我也不太熟悉他們)會在日誌記錄表中插入一條新記錄。需要報告哪些數據已更新或插入以及在哪個表上。

任何提示或示例?

注意:我用php做這件事很好,雖然它需要大約4個小時處理50K行。使用laravel php框架,在每個條目上循環更新4個其他表,其中每個表的數據和日誌等於每行8個查詢(這是使用laravel模型而不是原始sql)。我可以通過將日誌推入數組和批處理進行優化。但是你不能繞過所有的吞吐量而在MySQL中超過15秒的處理時間。現在我迷上了做sql方式的絕妙之處。

+0

我有點困惑你在問什麼。你顯然已經知道如何做一個插入,所以只需要做記錄更新/插入? – Erik

+0

基本上我想循環一個表中的所有行。並且能夠爲每一行編寫多個查詢。我會再做一些關於事務的搜索,我知道你可以在那裏指定多個查詢,儘管我認爲它們適用於全部或全部的方法。 – Lex

回答

1

如果您需要執行多個查詢語句。我指的是使用交易然後觸發來保證AtomicityACID的一部分)。貝婁代碼樣本MySql transaction

START TRANSACTION; 
UPDATE ... 
INSERT ... 
DELETE ... 
Other query statement 
COMMIT; 

內幕交易語句將被執行全有或全無。

0

如果您想做兩件事(插入基本行並插入日誌行),您將需要兩條語句。第二個可以(也應該)成爲觸發器。

+1

謝謝,也許我會推動使用觸發器。 – Lex

+0

是的它看起來像我可以實現我想象的唯一方法是使用遊標的存儲過程。不幸的是,我不認爲這會飛 – Lex

+0

也許如果你找出主要開發者不喜歡觸發器的原因,我們可以幫助你說服他/她。 –

0

使用觸發器會更好,它經常用於記錄目的

相關問題