班級網(wǎng)站素材下載百度推廣有哪些推廣方式
前言
這個也是我們經(jīng)??赡軙褂玫降南嚓P(guān)的特殊語句?
當(dāng)插入數(shù)據(jù)存在?唯一索引 或者 主鍵索引 相關(guān)約束的時候,?如果存在?約束沖突,?則更新目標(biāo)記錄?
這個處理是類似于?邏輯上的 save?操作?
insert into tz_test_02 (field1, field2) values ('field11', '11')
on duplicate key update field2 = '22';
?
?
該操作?整體邏輯類似于如下
Sting key = entity.key();
Object entityInDb = repository.findByKey(key);
if(entityInDb == null) {repository.insert(entity);return ;
}
repository.updateByKey(entity);
?
?
我們這里主要是從?mysql?源碼的層面來看一下?mysql?這邊是怎么處理的?
當(dāng)然?相對比較簡單,?大體的流程?和上面 一樣,?我們會忽略?大部分的細(xì)節(jié)
相對來說?比較簡單,?不花費(fèi)太多的信息來描述?
?
測試數(shù)據(jù)表如下?
CREATE TABLE `tz_test_02` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`field1` varchar(128) DEFAULT NULL,`field2` varchar(128) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `field_1` (`field1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
?
?
服務(wù)器這邊的數(shù)據(jù)插入
這里會先進(jìn)行數(shù)據(jù)插入,?如果插入失敗?走相關(guān)的補(bǔ)償處理
?
然后在插入索引記錄的時候,?由于?索引的唯一約束,?插入失敗,?這里響應(yīng)?DB_DUPLICATE_KEY 的錯誤?
?
?
服務(wù)器這邊數(shù)據(jù)更新
在補(bǔ)償?shù)奶幚砝锩??根據(jù)目標(biāo)條件對目標(biāo)記錄進(jìn)行更新?
這里相當(dāng)于執(zhí)行的是?是一個 “update tz_test_02 set field2 = '22' where field1 = 'field11';”
?
?
完
?
?
?