merge into 用法深思

2021-09-13 01:45:53 字數 1011 閱讀 3950

線上出現了乙個問題: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...