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的資料列時,直接忽略過去。
小結,上述三種方式就依照使用情境來選擇使用。
留言列表