我已經通讀類似問題的解決方案,但它們似乎都涉及腳本和額外的工具。我希望我的問題很簡單,以避免這種情況。MySQL數據庫的最佳更新方法
因此,用戶上傳下週數據的csv。它被插入到數據庫中,沒有問題。
但
一個小時後,他得到的反饋,從每個人,必須相應地進行更新。他更新了csv並將其上傳到數據庫。
現在,我正在使用的系統檢查該星期的數據是否已經存在,如果是,則從數據庫中提取所有數據,腳本找到差異併發送出去,並在這之後,數據舊數據被刪除並替換爲新數據。
很顯然,擦拭乾淨並重新輸入數據要容易得多,但不是最好的方法,特別是如果有大量更改或大量數據。但是我必須知道發送警報有什麼變化。但我不想要一個事務日誌,因爲這些警報只需要一次發送出去,之後,舊的數據就沒用了。
所以!
是否有一種巧妙的方法將新數據與已有數據進行比較,僅獲取更改/刪除/添加的行並進行更改?現在,似乎我可以做一個更新,但我不會得到任何迴應什麼變化...
謝謝!
快速編輯:
目前沒有外鍵正在使用。這很快就會改變,但它不應該有所作爲,因爲外鍵只會指向數據的影響,因此不需要改變。至於主鍵,這確實存在一點困難:
有問題的數據是每個人的工作時間表。所以這將是很好的(對於這個時間表的具體應用,除了簡單的輸出)每個班次都有一把鑰匙。但問題是,假設用戶1在星期一晚了。遲到記錄在一個單獨的表格中,並使用shift鍵與班次掛鉤。但是,如果週二有一些需要對已經進行的一週進行一些更改,我擔心的是確保數據庫中已經發生的所有條目變得很難(並且因此可能具有不應該的關聯被打破)將在這個過程中重新被鎖定。不幸的是,這並不像只更新當前時間之後發生的所有事件那樣簡單,因爲這會增加上傳人員的工作(並且因此使其不易上市)。基本上,他們在一個程序上製作時間表,將其導出爲CSV,然後將其上傳到所有需要該數據的Web應用程序的網頁上。所以對他們來說簡單得多(每個參與者的壓力都小),每次出口整個星期並上傳時都要做同樣的例程。
所以我最大的擔心就是讓上傳腳本在兩端都儘可能的聰明。它不會因爲試圖找到更改而變得臃腫,它可以找到更改,而不管輸入是什麼,並且沒有任何未更改的數據有被重新鍵入的風險。
這裏有一個相關的問題:
Suppose Joe User was schedule to wash dishes from 7:00 PM to 8:00 PM, but the new
data has him working 6:45 PM to 8:30 PM. Has the shift been changed? Or has the old
one been deleted and a new one added?
而另一個問題:
Say Jane was schedule to work 1:00 PM to 3:00 PM, but now everyone has a mandatory
staff meeting at 2:00 to 3:00. Has she lost one shift and gained two? Or has one
shift changed and she gained one?
我知道如何這種數據通常被處理真正感興趣/走近,更不是具體的答案以上。
再次,謝謝。
我建議你檢查,如果LOAD DATA(...)更換使用相同的語義爲MySQL的「替換」命令。 「替換」執行「刪除」,然後「插入」,但它會導致「ON DELETE」觸發器被調用,並進行foregin鍵檢查,「ON DELETE CASCADE」刪除外鍵... – Abgan 2009-01-02 15:39:14