經驗 如何使用replace而不丟失資料

2022-09-10 06:42:16 字數 779 閱讀 1343

背景:replace很好用,的應用場景比較多,但是直接使用可能會造成一引起欄位的值丟失.

解決方法:

一.原始資料

select id,f1,f2 ,flag from update_test;

id f1 f2 flag

1 1 a 1

2 2 b 1

二.更新一條記錄(注意欄位flag的值會丟失)

replace into update_test(id,f1,f2)

select 1 id,'100' f1,'aa' f2

;id f1 f2 flag

1 100 aa (null)

2 2 b 1

注意:replace是先刪除,後插入;如果插入的資料是部分字段(如讀取訂單.csv),那麼其實就造成了資料丟失.

三.避免方法,通過關聯語句先查詢出整行資料:

replace into update_test(id,f1,f2,flag)

select a.id,a.f1,a.f2,b.flag

from (select 2 id,'200' f1,'bb' f2 ) a join (select id,flag from update_test) b on a.id=b.id

;影響行數:2

查詢資料:

select id,f1,f2 ,flag from update_test;

id f1 f2 flag

1 100 aa (丟失)

2 200 bb 1 (儲存了原來的資料)

建議你使用LocalDateTime而不是Date

但是這三步不是原子操作 多執行緒併發如何保證執行緒安全 避免執行緒之間共享乙個 dateformat物件,每個執行緒使用時都建立一次 dateformat物件 建立和銷毀物件的開銷大 對使用format和parse方法的地方進行加鎖 執行緒阻塞性能差 使用threadlocal保證每個執行緒最多隻建...

對電阻使用的經驗法則說不

按照許多年前老師的教導,我們會在運算放大器的兩個輸入端放上相等的阻抗。本文 為什麼會有這麼一條經驗法則,以及我們是否應當遵循這種做法。如果您是在741運算放大器1橫行天下的時代長大的,那麼平衡運算放大器輸入端電阻的觀念必定已扎根在您的頭腦中。隨著時間的流逝,由於不同電路技術和不同ic工藝的出現,這樣...

如何在DataGrid裡面產生滾動條而不滾動題頭

作者blog base.onprerender e resourcemanager manager new resourcemanager this.gettype resourceset resources manager.getresourceset system.globalization.c...