開心一刻今天,她給我打來電話
她:你明天陪我去趟醫院吧
我:怎么了
她:我懷孕了,陪我去打胎
我:他的嗎
她:嗯
我心一沉,猶豫了片刻:生下來吧,我養!
她:他的孩子,你不配養!
我:我隨孩子姓

文章插圖
需求背景最近接到一個數據遷移的需求,舊系統的數據遷移到新系統;舊系統不會再新增業務數據,業務操作都在新系統上進行
為了降低遷移的影響,數據進行分批遷移,也就是說新舊系統會并行一段時間
數據分批不是根據 id 范圍來分的,也就說每批數據的 id 都是無規律的
另外,為了保證新舊系統數據的對應,新系統的 id 盡可能的沿用舊系統的 id
因為表 id 在新舊系統都是自增的,所以遷移的時候,舊系統的 id 可能在新系統已經被占用了,類似如下

文章插圖
需求描述數據遷移的時候,盡可能沿用舊系統的 id,而沖突的 id 需要進行批量調整
如何調整這批沖突的 id,正是我當下要實現的需求
我的實現是根據業務數據的增長情況,結合目前新系統的最大 id 來預設一個起始的 id

文章插圖
這個 SQL 該如何寫?
需求實現有小伙伴可能覺得,這還不簡單?
不就 5 條數據嘛,這么寫不就搞定了

文章插圖
多簡單的事,還鋪墊那么多,樓主你到底會不會?
樓主此刻幡然醒悟:小伙伴,你好厲害哇哦

文章插圖
但是如果沖突的數據很多了(幾百上千),你也這樣一條一條改?
如果你真這樣做,我是真心佩服你

文章插圖
很顯然,理智的小伙伴更多
那該如何實現了?
樓主就不賣關子了,可以用局部變量 + UPDATE 來實現,直接上 SQL

文章插圖
我們來看實際案例
表 tbl_batch_update

文章插圖
數據如下

文章插圖
執行效果如下

文章插圖
更新之后

文章插圖
更嚴謹點

文章插圖
該如何實現? UPDATE 是不是也支持 ORDER BY ?
還真支持,如下所示

文章插圖
樓主平時使用 UPDATE 的時候,基本沒結合 ORDER BY ,也沒嘗試過結合 LIMIT
這次嘗試讓樓主對 UPDATE 產生了陌生的感覺,它的完整語法應該是怎樣的?我們慢慢往下看
UPDATE下文都是基于 MySQL 8.0 的官方文檔 UPDATE Statement 整理而來,推薦大家直接去看官方文檔
經驗總結擴展閱讀
- 瓷磚留下印記怎么去除
- 《Vision Permutator: A Permutable MLP-Like ArchItecture For Visual Recognition》論文筆記
- ppt文件密碼忘記怎么辦
- 西游記的主要內容
- 一張口訣搞定英語語法
- 國家科技進步獎幾年評一次
- 微信聊天記錄怎么恢復原來這么簡單的啊(微信被誤卸載了如何恢復聊天記錄)
- 記敘文標題的特點和作用
- C++自學筆記 初始化列表 Initializer list
- 基礎&進階 線段樹學習筆記(一) | P3372 【模板】線段樹 1 題解
