線上出現了乙個問題:mq同步某一功能的資料的時候,同一主鍵的資料會發多次。業務邏輯是,某一條資料過來後,我會先去資料庫查是否存在了此uuid的資料,如果有的話更新,如果沒有的話插入。由於同一主鍵的資料會發不止一次的mq,並且間隔時間非常小,所以就導致了,兩條資料都進入了插入的邏輯裡面。丟擲主鍵衝突的異常。另外就算是進入到了不同的更新和插入的邏輯裡面,有時會出現第二條資料先進來,然後第一條資料再進來,此時資料庫裡面更新的就是第一次的資料,就會產生了資料錯誤。
綜合上述的描述,目前要解決的事情有:1、mq併發。2、資料儲存順序(前提:有標識能區分mq最新資料)。
基於上述描述準備用merge into 語句,用資料庫層面的事物來保證資料的一致性。那麼現在就來贅述一下merge into的一些用法
merge into 是用來進行合併表的,但因為其特性不同場合用法有以下幾種
1、合併表
2、外部資料插入更新
3、用join表更新
1和3我這裡就不贅述了,我使用到的是2這一類,最後經過改造我所用到的sql如下:
1 merge into mytable t1
2 using dual on ( t1.tuuid =?)
3 when matched then
4 update set modify_date =?,
5 *** =?
6 where *** != 'n'
7 when not matched then
8 insert (
9 uuid,
10 ***,
11 modify_date ) values (?,?,?);
由於是外部更新,屬於型別2只有一張表,所以在第2行引入偽表做關聯條件。同時sql第6行判斷的是mq的順序,如果根據uuid發現表裡面存在資料並且***值為『n』就表示mq過來後插入的是第二條資料,那麼就不需要再做更新。(關鍵的地方是第2行【偽表】和第6行【merge語句可以在update語句裡面寫where條件】的改動)
oracle裡的merge into用法
1 根據表newproducts的product id欄位是否匹配來updates表products的資訊 sql merge into products p 2 using newproducts np 3 on p.product id np.product id 4 when matched ...
oracle 中merge into 的用法
用途 merge 命令可以用來用乙個表中的資料來修改或者插入到另乙個表。插入或者修改的操作取決於on子句的條件。該語句可以在同一語句中執行兩步操作,可以減少執行多條insert 和update語句。merge是乙個確定性的語句,即不會在同一條merge語句中去對同一條記錄多次做修改操作。語法 1.i...
Oracle 中Merge into 的用法
核心用途 使用一語句從乙個或者多個資料來源中完成對錶的更新和插入操作。用法規則 1 insert 和update是可選的 2 update和insert後面可以跟where子句 3 在on條件中可以使用常量來insert所有的行到目標表中,不需要連線到源表和目標表 4 update子句後面可以跟de...