close

MySQL上沒有跟SQL Server、Oracle一樣的Merge語法

但還是有相似的語法可以用

INSERT INTO ... ON DUPLICATE KEY UPDATE : 新增資料時遇到重複唯一值時更新部分欄位

REPLACE INTO : 新增資料時遇到重複唯一值時取代原先資料

INSERT IGNORE : 新增資料時當遇到重複唯一值時忽略該筆資料

 

SQL Server or Oracle 的 Merge語法,在使用時須要定義清楚什麼條件要執行更新、什麼條件要執行新增 

MERGE INTO A 

USING B ON A.Col1 = B. Col1 AND .....

可以看到遇到ON後方的連結條件,符合執行UPDATE,沒有符合的就執行INSERT

 

但MySQL不在使用語法上面作定義,而需要先定義好要轉進的資料表的唯一值欄位 UNIQUE COLUMN,才可以使用上訴的三種語法

接下來說明三種語法的使用方式跟要注意的部分

(1) INSERT INTO ... ON DUPLICATE KEY UPDATE

INSERT INTO [目的資料表] ( [要Insert的欄位] )

SELECT [要Insert的欄位]

FROM [來源資料表]

ON DUPLICATE KEY UPDATE

[目的資料表] . [要Update的欄位] = [更新數值]

這方法跟Merge比較像,當遇到已經存在相同Unique Key的資料列時,更新指定要更新的欄位就好

 

(2) REPLACE INTO

REPLACE INTO [目的資料表] ( [欄位] )

SELECT [欄位] FROM [來源資料表] 

當遇到已經存在相同Unique Key的資料列時,會用新的蓋過舊的

沒有相同的資料列會新增進去

這邊要注意的部分是,未表列出要處理的欄位也會被蓋過,所以會用default value or null

比較像是比存在的資料砍掉再新增進去

 

(3) INSERT IGNORE

語法與INSERT INTO相似

INSERT IGNORE INTO [目的資料表] ( [欄位] )

SELECT [欄位] FROM [來源資料表]

當遇到已經存在相同Unique Key的資料列時,直接忽略過去。

 

小結,上述三種方式就依照使用情境來選擇使用。

 

arrow
arrow
    文章標籤
    MySQL
    全站熱搜

    Louis 發表在 痞客邦 留言(0) 人氣()