簡體   English   中英

MySQL DB的最佳更新方法

[英]Best Update Method for MySQL DB

我已經通讀了類似問題的解決方案,但它們似乎都涉及腳本和其他工具。 我希望我的問題很簡單,可以避免這種情況。

因此,用戶上傳了下周數據的csv。 它將插入數據庫,沒問題。

一個小時后,他得到了所有人的反饋,並且必須進行相應的更新。 他更新了csv,然后將其上傳到數據庫。

現在,我正在使用的系統檢查該周的數據是否已經存在,如果存在,則從數據庫中提取所有數據,腳本查找差異並將其發送出去,然后這樣,將刪除舊數據並將其替換為新數據。

顯然,擦除並重新輸入數據要容易得多,但不是最好的方法,尤其是在有大量更改或大量數據的情況下。 但是我必須知道已進行了哪些更改以發送警報。 但是我不需要事務日志,因為警報只需要發送一次,然后,舊數據就沒有用了。

所以!

有沒有一種聰明的方法可以將新數據與現有數據進行比較,僅獲取已更改/刪除/添加的行,然后進行更改? 現在看來我可以進行更新了,但是對於什么變化我什么也沒有得到回應。

謝謝!

快速編輯:

當前沒有使用外鍵。 這將很快發生變化,但不會有所不同,因為外鍵僅指向數據效果的對象,因此不需要更改。 就主鍵而言,確實存在一些難題:

有問題的數據是每個人的工作計划。 因此,對於每個班次都有一個鍵(對於該計划的特定應用,而不是簡單的輸出)會很好。 但是問題是,假設user1在星期一晚了。 遲滯記錄在單獨的表中,並使用Shift鍵與班次相關。 但是,如果在星期二需要對正在進行的一周進行一些更改,那么我擔心的是,要確保數據庫中所有已發生的條目變得太困難了(因此可能會有不應該關聯的關聯)損壞)將在此過程中重新輸入密碼。 不幸的是,這不僅僅只是更新當前時間之后發生的所有事件那樣簡單,因為這會給進行上傳的人員增加工作量(從而使其市場化程度降低)。 基本上,他們在一個程序上制定計划,將其導出為CSV,然后將其上載到需要該數據的所有Web應用程序的網頁上。 因此,對於他們來說(每次導出整個星期並上傳它),每次執行相同的例程對他們來說都容易得多(對所涉及的每個人來說壓力都較小)。

因此,我最大的擔心是使上傳腳本在兩端都盡可能聰明。 嘗試查找更改不會感到ated腫,無論輸入內容如何,​​它都能找到更改,並且所有不變的數據都沒有重新輸入密鑰的風險。

這是一個相關的問題:

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 LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name

現在,我正在使用的系統檢查該周的數據是否已經存在,如果存在,則從數據庫中提取所有數據,腳本查找差異並將其發送出去,然后這樣,將刪除舊數據並將其替換為新數據。

這樣您的腳本就知道其中的區別吧? 而且,除了腳本和MySQL,您不想使用其他額外的工具,對嗎?

我非常確信MySQL本身不提供任何“ diff”工具,因此,您可以實現的最佳效果是制作新的CSV文件,僅用於更新。 我的意思是-它應該只包含已更改的行。 更新將更快,並且所有更改的數據將很容易獲得。

暫無
暫無

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

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