MySQL -- INSERT ON DUPLICATE KEY UPDATE 使ç¨
åè¨ï¼
MySQL ä¸ INSERT ON DUPLICATE KEY UPDATE è¿ä¸ªæ¹æ³å¯è½ä¸æ¯å¾å¸¸ç¨ï¼ä½å´å¾å¥½ç¨ï¼å®ä¸»è¦åè½æ¯ï¼å½æå
¥çæ°æ®ä¸çä¸»é® ä¸ æ°æ®åºä¸ç°æçæ°æ®ä¸»é® éå¤çæ
åµä¸å°±ä¸ä¼æ§è¡æå
¥æä½ï¼èæ¯å¯ä»¥å¯¹ç°æçæ°æ®è¿è¡æ´æ°æä½ï¼ä¸åå¨ç¸å主é®åæ§è¡æå
¥æä½ã
ä¸é¢æ¥è¯´è¯´ï¼æä¸ºä»ä¹ä¼éè¦è¿æ ·çæä½ï¼
å设æè¡¨ Aï¼Bï¼Cï¼ä»ä»¬ç主é®å嫿¯ a-pkï¼b-pkï¼c-pk
Aè¡¨ç»æ
| a-pk | b-pk | c-pk | other |
| md5(bbcc) | bb | cc | 66 |
| md5(2233) | 22 | 33 | 55 |
-
å ¶ä¸Aè¡¨æ¯æ¥è¡¨æ°æ®è¡¨ï¼å®æ¯ç± b-pkï¼c-pk æ¥ç¡®å®å¯ä¸ä¸æ¡æ°æ®ï¼æå¼å§çæ³æ³æ¯ï¼éè¿å»ºç«ï¼b-pk,c-pkï¼çèåå¯ä¸çº¦æ æ¥ç¡®ä¿æ°æ®è¡çå¯ä¸æ§ï¼è¥æå ¥å¤±è´¥ï¼è¯´æå·²ç»åå¨ç¸åç b-pkï¼c-pk ç»åï¼å对 other åæ®µè¿è¡æ´æ°æä½ãæ¯å¦å¯ä»¥è¿è¡ä¼åä¸ä¸ï¼ä¸å»ºç«èåå¯ä¸çº¦æå¯ä»¥ä¸ï¼
-
å 为 b-pkï¼c-pkï¼ä»ä»¬æ¬èº«ä½ä¸ºä¸»é®å ·æå¯ä¸æ§ï¼ç±æ¤ä»ä»¬çç»åä¹åºå½å ·æå¯ä¸æ§ï¼éè¿ç®åç b-pk+c-pk åç¬¦ä¸²æ¼æ¥å¯å¾åºä¸ä¸ªå¯ä¸çå符串ï¼å¯ä½ä¸º A 表çä¸»é® a-pk çå¼ï¼è¿æ ·å¯ä»¥ç¡®ä¿å¯ä¸æ§ï¼ä¹å¯ä»¥å æ MySQL è·åèªå¢ä¸»é®æå¸¦æ¥çæ¶èã
-
åæ¶ä¸ºäºä½¿A表主é®é¿åº¦å¨ä¸å®èå´å ï¼æä»¥æä»¬å对 b-pk+c-pk æ¼æ¥çåç¬¦ä¸²ç»æè¿è¡ 32ä½ MD5 åä½ä¸º A 表ç主é®ï¼MD5 æ¯åå è¿å¶ï¼æä»¥32ä½ç MD5 ä¸ªæ°æ 16ç32次æ¹ä¸ªï¼è¿ä¸ªæ°é常大ï¼40亿ç4次æ¹ä¸ªæ°ï¼é¤éä½ çè¡¨æ°æ®è¶ è¿äº 40亿ç4次æ¹è¡ï¼ä¸ç¶ä¸å¯è½ä¼éå¤çã
-
䏻鮿¯éè¿ md5(b-pk+c-pk) å¤é¨çæçï¼æä»¥å¯ä»¥ç´æ¥å©ç¨ä¸»é®å¯ä¸æ§çº¦ææ¥ç¡®ä¿æ°æ®è¡å¯ä¸æ§ï¼è¿æ ·å°±ä¸éè¦å»ºç«ï¼b-pk,c-pkï¼èåå¯ä¸çº¦æãå°è¿éå¤å¥½äºåï¼è¿æ ·è¿æ¯éè¦å æå ¥ï¼å¤±è´¥åæ´æ°ï¼éè¦ä¸¤æ¡SQLï¼ææ²¡æå¯ä»¥æ´å¥½çï¼
-
å½ç¶è¿å¯ä»¥æ´å¥½ï¼ææ³äºæ³æè¿ç§æä½æ£å¥½éç¨ æå ¥ä¸»é®é夿¶åæ´æ°æä½ï¼äºæ¯å°±ç¨äºæç« å¼å¤´æè¯´çæ¹æ³ INSERT ON DUPLICATE KEY UPDATE
使ç¨ï¼
1.åæ¡æ°æ®æå
¥ï¼ä»¥è¡¨A为ä¾ï¼
-
åºå®æ´æ°åæ°å¼ï¼
INSERT INTO A (a-pk,b-pk,c-pk,other) VALUES (md5(bbcc),bb,cc,666) ON DUPLICATE KEY UPDATE other=666; -
ä¼ å ¥æ´æ°åæ°å¼ï¼
INSERT INTO A (a-pk,b-pk,c-pk,other) VALUES (md5(bbcc),bb,cc,666) ON DUPLICATE KEY UPDATE other=VALUES(other); -
ä¸é¢ä¸¤æ¡SQLæ§è¡å other å¼é½ä¸º 666ï¼å½æ²¡æç¸åæ°æ®æ§è¡æå ¥æ¶è¿åçåå½±åè¡æ°ä¸º 1ï¼å½ç¸åçæ¶åæ§è¡æ´æ°æä½è¿åçåå½±åè¡æ°ä¸º 2ï¼ä¸æ¡æ¯æä»¬åå¤æå ¥çï¼ä¸æ¡æ¯åææ´æ°çï¼ã
2.æ¹éæ°æ®æå ¥
-
ååæ®µæ´æ°ï¼
INSERT INTO `student_course`(`id`, `user_id`, `nc_id`, `nc_user_id`, `nc_commodity_id`, `course_no`, `course_name`, `business_id`)
VALUES
(277941, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'å·¥ä¸ä¼è®¡å®æV9.0--55', 'kuaiji'),
(277942, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'å·¥ä¸ä¼è®¡å®æV9.0--66', 'kuaiji'),
(277943, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'å·¥ä¸ä¼è®¡å®æV9.0--77', 'kuaiji')
ON DUPLICATE KEY UPDATE
course_name = VALUES(course_name)
å¤åæ®µæ´æ°ï¼
INSERT INTO `student_course`(`id`, `user_id`, `nc_id`, `nc_user_id`, `nc_commodity_id`, `course_no`, `course_name`, `business_id`)
VALUES
(277941, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'å·¥ä¸ä¼è®¡å®æV9.0--55', 'kuaiji'),
(277942, 11056941, '1001EE1000000043G2T5', '1001EE1000000043G2TO', '1001A5100000003YABO2', 'kckm303', 'å·¥ä¸ä¼è®¡å®æV9.0--66', 'kuaiji')
ON DUPLICATE KEY UPDATE
course_name = VALUES(course_name),
business_id = VALUES(business_id);
3.Mybatisä¸ç使ç¨
<insert id="insertBatch" parameterType="java.util.List" >
INSERT INTO bi_log_student_attend (
id, user_plan_id, class_type_id,
compliance_per, creation_time, modified_time
)
VALUES
<foreach collection="list" index="index" item="item" separator="," >
(
#{item.id,jdbcType=VARCHAR},
#{item.userPlanId,jdbcType=BIGINT},
#{item.classTypeId,jdbcType=BIGINT},
#{item.compliancePer,jdbcType=DECIMAL},
#{item.creationTime,jdbcType=TIMESTAMP},
#{item.modifiedTime,jdbcType=TIMESTAMP}
)
</foreach>
ON DUPLICATE KEY UPDATE
compliance_per = VALUES(compliance_per),
modified_time = VALUES(modified_time)
</insert>