一,背景。 1,線上上版本開發的時候,會經常遇到一些對原來的表欄位進行拆分,將表格的欄位複製到另一個表。主要介紹幾種資料庫欄位更新的方式。
二, 更新方式。 1,使用java代碼進行更新,不過會經常需要讀取資料庫,更新資料的值。適合處理很複雜的邏輯,但是更新時間會長點,有可能影響到線上的服務。 2,使用mysql語句進行更新,其實基本上都可以解決資料庫更新的問題。處理的速度也會快很多。
三,mysql資料庫更新方式。 1,大表間的資料更新。對於從一張幾百萬的表中擷取兩個欄位的資料,並且又匹配相應的內容存到另一張表中。直接的從這張表中擷取兩個欄位資料並且更新是會比較久的,而且會造成鎖表的情況, 在伺服器不能停機更新的時候,這個就會比較麻煩,所以比較好的方式。是一張表中的需要的幾個欄位都select出來,並且存入到另一張表中,並且對其建立相應的索引。再匹配待更新表的欄位,這樣既不會影響到線上的功能運轉,也可以很快地實現。
其中的原理是取出自己想要的資料,而不是全部的資料,並且將相應的資料建立好索引,加快查詢速度。
四,重複資料的尋找及刪除。 1,尋找重複的資料時,並且重複記錄是一個欄位的時候。用得比較多的就是select * from user where is_deleted = 0 group by phone having count(*) > 1 這種的方式。 2,但是如果是尋找重複記錄中(多個欄位),就需要換一種方式。
select * from user a
where (a.peopleId,a.seq) in (select peopleId,seq from user group by peopleId,seq having count(*) > 1)
* 3,重複資料刪除記錄中重複記錄。並且只留有最小的id。
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)