å¨ä¸å¡ç³»ç»å¼åè¿ç¨ä¸ï¼ä½ä¸ºä¸ä¸ªâcurd boyâï¼ç»å¸¸ä¼å¯¹æ°æ®åºè¿è¡æ°å¢åä¿®æ¹ï¼æ°å¢æä½ç¸å¯¹ç®åï¼ç´æ¥æ§è¡insert æä½å³å¯ï¼èå¯¹äºæ´æ°æä½ï¼å°±æ¯è¾å¤æä¸ç¹äºï¼ä¸»è¦æ¯å ä¸ºè¢«æ´æ°çåæ®µä¸æ¯åºå®çï¼æçä¸å¡éè¦æ´æ°æ»¡è¶³æ¡ä»¶æ°æ®è¡çAåæ®µï¼æçéè¦æ´æ°Båæ®µï¼æçAåæ®µåBåæ®µé½è¦æ´æ°ãé¾ä¸æåä¸ä¸ªå®ç°ï¼åå«ç¨æ¥æ´æ°Aï¼BåAï¼B? 妿忮µå°çè¯ï¼è¿ç§åæ³æªå°ä¸å¯ï¼ä½æ¯å¦æéè¦æ´æ°çåæ®µå¾å¤è¯ï¼è¿ç§åæ³æ¯å°±æç¹è¦å½äºã
1.æ 差嫿´æ°
使ç¨mybatisç读è ï¼å¯¹äºè¿ä¸ªé®é¢æä¸ä¸ªæ¯è¾å¥½ç¨çè§£å³æ¹æ¡ï¼é£å°±æ¯æ å·®å«çæ´æ°ï¼å¯¹ææå段è¿è¡æ´æ°ãå¦æææ°å¼ç¸æ¯åå¼åçäºååï¼é£ä¹å°±æ´æ°ä¸ºææ°å¼ï¼å¦ææ²¡æåçååï¼å³ä½¿è¿è¡äºæ´æ°æä½ï¼é£ä¹å¯¹ä¸å¡ä¹æ²¡æå½±åã
å ·ä½ä»£ç å¦ä¸ï¼
<update id="update" parameterType="xxxPO">
update table1
<set>
<if test="id != null">
id = #{id,jdbcType=BIGINT},
</if>
<if test="prop1 != null">
column1 = #{prop1,jdbcType=VARCHAR},
</if>
<if test="prop2 != null">
column2 = #{prop2,jdbcType=VARCHAR},
</if>
...
</set>
<where>
id=#{id,jdbcType=BIGINT}
</where>
</update>
ä»ç»å¯¹æ¯xxxMapper.javaä¸æå ¥åæ´æ°çæ¹æ³å ¥åï¼ä¼åç°è¿ä¸¤ä¸ªæ¹æ³çå ¥åç±»åæ¯ä¸æ ·çï¼
void insert(@Param("xxpo") xxPO xxpo);
void update(@Param("xxpo") xxPO xxpo);
é£è½å¦å°ä¸¤è åäºä¸ºä¸å¢ï¼
2.æ°å¢åä¿®æ¹åäºä¸ºä¸
è¦å®ç°æ°å¢åä¿®æ¹åäºä¸ºä¸ï¼éè¦è§£å³ä¸ä¸ªé®é¢ï¼å¦ä½åºåæ°å¢åæ´æ°æä½ï¼ä¹å°±æ¯ï¼ä»ä¹æ¶åæ§è¡æ°å¢ï¼ä»ä¹æ¶åæ§è¡æå ¥ã带çè¿ä¸ªé®é¢ï¼æ¥è¿å ¥æä»¬ä»å¤©çæ£é¢ãç®åå¨sqlå±é¢å®ç°âä¸å卿¶è¿è¡æå ¥ï¼å卿¶æ´æ°âçæ¹å¼æä¸¤ç§ï¼
insert into ... on duplicate key update ...;
å
replace into ... values ...;
replace into ⦠å®ç°çè¯ä¹ï¼è¢«æå ¥çæ°æ®ï¼ä¸åå¨çè¯ï¼è¿è¡æå ¥æä½ï¼åå¨çè¯ï¼æ§è¡"æ¿æ¢"æä½ã
insert into ⦠on duplicate key update ⦠å®ç°çè¯ä¹ï¼è¢«æå ¥çæ°æ®ï¼ä¸åå¨çè¯ï¼è¿è¡æå ¥æä½ï¼åå¨çè¯ï¼æ§è¡"æ´æ°"æä½ã
è¿éç"åå¨"å¦ä½å®ä¹ï¼"æ¿æ¢"å"æ´æ°"å ·ä½çæä½åæ¯ä»ä¹ï¼æä»¬å¨åé¢è®¨è®ºã
ä¸ºäºæ¹ä¾¿ä¸é¢çæ¼ç¤ºåæè¿°ï¼è¿é建ç«å¦ä¸çè¡¨ç»æ
CREATE TABLE `test_insert_update` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主é®',
`a` int(11) NOT NULL,
`b` int(11) NOT null,
`c` int(11) NOT null,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_a` (`a`) USING BTREE,
UNIQUE KEY `uk_b` (`b`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ;
å建test_insert_update表ï¼å®ä¹èªå¢ä¸»é®idåä¸ä¸ª intååæ®µ a,b,cãå¹¶å¨aåbåæ®µä¸ï¼å»ºç«å¯ä¸ç´¢å¼ãåè¡¨ä¸æå ¥å¦ä¸æ°æ®ï¼
insert into test_insert_update (a,b,c) VALUES(1,1,1);
insert into test_insert_update (a,b,c) VALUES(2,2,2);
insert into test_insert_update (a,b,c) VALUES(3,3,3);
insert into test_insert_update (a,b,c) VALUES(4,4,4);
replace into
replace into å¤ææ°æ®æ¯å¦"åå¨"çæºå¶æ¯ï¼è¢«æå ¥çæ°æ®æ¯å¦è¿å
主é®ç´¢å¼
æè
å¯ä¸é®ç´¢å¼
约æã妿䏤è 齿²¡æè¿åçè¯ï¼å°±è¿è¡æå ¥æä½ï¼å¦ææè¿åçè¯ï¼å°±ä¼æ§è¡"æ¿æ¢"æä½ï¼è¿éçæ¿æ¢æåçäºæ æ¯ï¼
å
å é¤ï¼å¨æå
¥
ã
å é¤ï¼å 餿æä¼äº§çä»¥ä¸æè¯´çå²çªçæ°æ®è¡ã
æå ¥ï¼æ¤æ¶å¯ä»¥å° replace into çæ insert into è¯å¥ã
为äºéªè¯ä»¥ä¸ç»è®ºï¼æä»¬è¿è¡ä¸ä¸å®éªï¼
1.æ£å¸¸æå ¥æ°æ®
æå ¥ä¸æ¡åç°ææ°æ®æ²¡æå²çªçæ°æ®ï¼æ°æ®å¯ä»¥æ£å¸¸æå ¥
ç»æå¦ä¸ï¼

2.æå ¥ä¸æ¡è¿å主é®çº¦æçæ°æ®
æå ¥ä¸æ¡å主é®id=5çæ°æ®è¡åå¨ä¸»é®å²çªçæ°æ®ã
ç»æå¦ä¸ï¼
å ¶å®è¿éå¹¶ä¸å¥½ç¡®å®æ¯replace intoå¨éå°é夿°æ®æ¶ï¼æ¯å å é¤ååæå ¥ï¼è¿æ¯ç´æ¥æ´æ°ãè¿ä¸ªå¨åé¢è¿è¡éªè¯ã
3.æå ¥ä¸æ¡è¿åå¯ä¸é®çº¦æå°çæ°æ®ã
æå ¥ä¸æ¡åid=5çæ°æ®è¡åå¨ï¼å¯ä¸é®aå²çªçæ°æ®ã
ç»æå¦ä¸ï¼
4.æå ¥ä¸æ¡ï¼è¿åå¤ä¸ªå¯ä¸é®å主é®ççæ°æ®ã
å¨è¿ä¸ªè¯å¥ä¸ï¼è¢«æå ¥çæ°æ®å表ä¸ä¸»é®id为1ï¼2ï¼3çæ°æ®è¡é½åå¨å¯ä¸é®æè 主é®å²çªã该è¯å¥æ§è¡åçç»æå¦ä¸ï¼
éè¿å¤ä¸ªå¯ä¸é®å主é®å²çªçæ°æ®æå ¥æä½ï¼å¯ä»¥éªè¯ï¼replace into éå°æ°æ®å²çªæ¶ï¼æ§è¡çæä½ï¼æ¯å å é¤ï¼åæå ¥ãèä¸è¿éçå é¤ï¼æ¯ææææå²çªæ°æ®è¡å ¨é¨å é¤ï¼ä¹å°±æ¯ä¸»é®id为1ï¼2ï¼3çæ°æ®è¡ã
insert into on duplicate key update
insert into on duplicate key update å¤ææ°æ®æ¯å¦åå¨çæºå¶ï¼éè¦æå ¥çæ°æ®æ¯å¦è¿å䏻鮿è å¯ä¸é®çº¦æãå¦æä¸¤ä¸ªé½æ²¡æè¿åçè¯ï¼å°±è¿è¡æå ¥æä½ã妿åå¨è¿åçè¯ï¼å°±ä¼æ§è¡"æ´æ°"æä½ï¼è¿éæ´æ°æåçäºæ æ¯å°æå²çªçæ°æ®è¡ï¼æ§è¡"update"åçæä½ã
è¿ééè¦æ³¨æçæ¯ï¼è¢«æ´æ°çæ°æ®è¡ï¼åªæä¸è¡ï¼ä¹å°±æ¯è¯´ï¼å³ä½¿éè¦æå ¥çæ°æ®åç°ææ°æ®ä¸çå¤è¡åå¨å¯ä¸é®å²çªå主é®å²çªï¼ä¹åªä¼å¯¹å¤è¡æ°æ®ä¸çä¸è¡æ°æ®æ§è¡æ´æ°æä½ã
æ´æ°å¤è¡æ°æ®ä¸çåªä¸è¡ï¼
å¨æå ¥ä¸è¡æ°æ®æ¶ï¼ä¼éªè¯è¿è¡æ°æ®åç°æä¸»é®ï¼å¯ä¸é®æ¯å¦åå¨å²çªï¼å 为éªè¯çè¿ç¨ä¸ï¼æ¯ä¸ªé®ç被éªè¯çä¼å 级æ¯ä¸åçï¼å¨ä½¿ç¨æä¸ªé®éªè¯æ¶ï¼æ£æ¥å°åå¨æè¡æ°æ®åå¾ æå ¥æ°æ®åå¨å²çªæ¶ï¼é£ä¹å°±æ´æ°è¢«æ£æ¥çè¿è¡æ°æ®ãå©ä½çå ¶ä»é®ï¼ä¸ä¼å被éªè¯ãæä»¥è¿éè¢«æ´æ°çæ°æ®è¡ï¼åæ£éªå²çªæ¶è¢«æ£éªçé®çä¼å 级å®ä¹æå¾å¤§å ³ç³»ã
å¨mysqlä¸ï¼ä¸»é®çä¼å 级æé«ï¼å ¶ä»å个å¯ä¸é®çä¼å 级ï¼åå³äºåå»ºè¡¨çæ¶åï¼å¯ä¸é®å®ä¹çå å顺åºï¼é¡ºåºé åçï¼è¢«ä¼å éªè¯ï¼é¡ºåºé åçå¯ä¸é®ï¼è¢«éªè¯çä¼å 级ä¹å°±æ¯è¾ä½ã
为äºéªè¯ä»¥ä¸ç»è®ºï¼æä»¬è¿è¡ä»¥ä¸å®éªï¼å¨è¿è¡å®ç°åï¼æä»¬éæ°åå§åä¸ä¸è¡¨ä¸çæ°æ®ï¼åå§ååï¼è¡¨ä¸æ°æ®å¦ä¸ï¼
1.æ£å¸¸æå ¥æ°æ®
ç»æå¦ä¸ï¼
2.æå ¥ä¸æ¡è¿å主é®çº¦æçæ°æ®
æå ¥ä¸æ¡å主é®id=5çæ°æ®è¡ï¼åå¨ä¸»é®å²çªçæ°æ®ã
ç»æå¦ä¸ï¼
3.æå ¥ä¸æ¡è¿åå¯ä¸é®çº¦æçæ°æ®
æå ¥ä¸æ¡å主é®id=1çæ°æ®è¡ï¼åå¨å¯ä¸é®aå²çªçæ°æ®ã
æ§è¡ç»æï¼
4.è¿åå¤ä¸ªå¯ä¸é®çº¦æå主é®çº¦æ
æå ¥ä¸æ¡å主é®id为1ï¼2ï¼3ï¼4çæ°æ®è¡ï¼åå¨ä¸»é®åå¯ä¸é®å²çªçæ°æ®ãä¸è¿ï¼è¿éåªä¼å¯¹æ°æ®åºä¸id=1è¡è¿è¡æ´æ°ã
3.两ç§å®ç°æ¹å¼æ¯è¾
ä¸é¢è¯¦ç»ä»ç»äº replace into å insert into on duplicate key update çå®ç°åçåä½¿ç¨æ¹å¼ãé£ä¹å¨å·¥ä½ä¸ï¼å¨ä¸¤è ä¸å¦ä½è¿è¡éæ©å¢ï¼
å¨è¿è¡éæ©åï¼æä»¬é对两è è¿è¡ä¸ä¸å¯¹æ¯ï¼ä»¥ååèªçä¼ç¼ºç¹ï¼è¿æ ·ï¼æè½æ´æ¸ æ¥ï¼å¦ä½è¿è¡éæ©ã
ç¸åç¹
é¦å 两è å¨å¤æä½æ¶è¿è¡æå ¥æä½ï¼ä½æ¶è¿è¡æ´æ°æä½çæºå¶æ¯ä¸æ ·çï¼é½æ¯å©ç¨æ¯å¦åå¨ä¸»é®æè å¯ä¸é®å²çªå³å®çã妿ä¸åå¨å²çªï¼å°±è¿è¡æå ¥æä½ï¼å¦åå°±æ§è¡æ´æ°æè "æ¿æ¢"ã
ä¸åç¹
ä¸è¿ä¸¤è çå·®å¼ä¹æ¯å¾ææ¾çï¼ä¸»è¦ä½ç°å¨ï¼å½åå¨ä¸»é®æè å¯ä¸é®å²çªæ¶çå¤çæºå¶æ¯æªç¶ä¸åçã
å½åå¨å²çªæ¶ï¼replace intoçåæ³æ¯å°ææå²çªçæ°æ®å é¤ï¼ç¶ååæå ¥ä¸æ¡æ°çæ°æ®ã
è¿ç§åæ³ç好å¤å¨äºï¼å é¤å²çªçæ°æ®ï¼å¨è¿è¡æå ¥çæ°æ®ï¼ä¸ä¼è§¦åå¯ä¸æ§çº¦æäºãèä¸è¶³ä¹å¤å¨äºï¼å½åå¨é夿°æ®æ¶ï¼è¿è¡å é¤ï¼ç¶åå¨è¿è¡æå ¥ï¼é£ä¹å¨æ°æ®å±é¢ï¼å°±æ æ³æç¥"åå"äº.æ¯å¦ï¼å¦æå¨å¨æ°æ®è¡¨ä¸å®ä¹çctimeåmtime(åå«è¡¨ç¤ºæ°æ®å建æ¶é´åä¿®æ¹æ¶é´)ï¼æ°¸è¿é½æ¯ä¸æ ·çã
èå¯¹äº insert into duplicate çå®ç°æ¹å¼ï¼ä¼å¯¹å ¶ä¸ä¸è¡æ°æ®è¿è¡æ´æ°ï¼ä½æ¯æ´æ°æä½ä»ç¶æå¯è½ä¼è¿åå¯ä¸æ§çº¦æï¼å¯¼è´æ´æ°æä½å¤±è´¥ã使¯å®æ¬èº«å°±æ¯ä¸ä¸ªæ´æ°æä½ï¼æ´æ°æ¶é´ä¼è®°å½å°mtimeä¸ï¼å¯ä»¥ä½ç°åºä¿®æ¹ã
4.æ»ç»
replace into å insert into on duplicate key update é½å¯ä»¥å®ç°å½å卿°æ®é夿¶ï¼è¿è¡æ°æ®"æ´æ°"æä½ï¼ä¸¤è çå·®å¼ååèªçä¼ç¼ºç¹ä¸æä¹è¿è¡äºéè¿°ãå¨ä½¿ç¨æ¶å¯ä»¥æ ¹æ®å ·ä½ä¸å¡è¿è¡éæ©ã
è¿éè¿è¦ä¸ç¹éè¦æéï¼å¦ææ°æ®è¡¨ä¸ç䏻鮿¯èªå¢çè¯ï¼æ è®ºä½¿ç¨ replace intoè¿æ¯ insert into on duplicate update é½ä¼å¯¼è´ä¸»é®ä¸è¿ç»çé®é¢ãé®é¢äº§ççåå ï¼å¨è¿è¡æ°æ®æå ¥åï¼auto_incrementçå¼å·²ç»èªå¢è¿äºï¼å³ä½¿æç»æ°æ®æå ¥å¤±è´¥ï¼auto_incrementä¹ä¸ä¼å¨åæ»äºãå ·ä½ç»èå¯ä»¥åè"ä½ ççæèªå¢ä¸»é®å"