我完全知道這絕不應該發生。永遠。但是,最近我開始在一家沒有最好的數據庫設計或輸入驗證的公司工作,這種情況已經出現。合併具有唯一列的兩個表項(MySQL)
有一張表,我們稱之爲'工作'*。工作有一個主鍵,'ID'。 ID爲1的作業具有與其相關的大量數據;然而,愚蠢的是,有人把這個工作重複爲id 2(到目前爲止,這發生了大約500次)。所有這兩個信息都需要合併爲id 1(或2,沒關係)。
通過外鍵將列鏈接到UPDATE:CASCADE和DELETE:RESTRICT。他們並不都是所謂的jobs_id。
這裏是我唯一的(貌似合理的)選項:
- 的變化ID 1的東西我可以保證不使用(2,147,483,647)
- 暫時移除外鍵刪除:限制
- 刪除ID爲1
- 更新ID 2項至2,147,483,647
- 的變化ID 2,147,483,647(它與所有其他條目鏈接)ID 2
- 恢復刪除:限制
由於沒有代碼的實際執行刪除操作(限制在那裏,就像一個故障安全(有人在DB)直接編輯),並且更新:級聯留在,數據不應該不同步。雖然這看起來很亂。
這將被包裹在一個事務中。
我可以寫一些東西來遍歷每個表(〜180)和每列以找到某些名稱/條件,然後從1更新到2,但是當新的表/列出現時需要維護。由於這種情況已經發生了很多,而且我沒有看到重寫以防止它很快發生,所以'解決方案'(貼膏藥)需要是半自動的。
- 不是表的真名。他(或她)的身份已被僞裝,所以他(或她)不會受到欺凌。
欣賞任何輸入。
在我嘗試回答此問題之前,請將以下各項添加到步驟中。 1.做一個完整的備份。 2.在另一臺機器上測試備份,例如恢復到開發環境。 – Namphibian
在生產服務器上執行之前,這總是要在開發環境中進行測試。 – Aeisor