ÏòÊý¾Ý¿â²åÈë¼Ç¼ʱ£¬ÓÐʱ»áÓÐÕâÖÖÐèÇ󣬵±·ûºÏijÖÖÌõ¼þµÄÊý¾Ý´æÔÚʱ£¬È¥ÐÞ¸ÄËü£¬²»´æÔÚʱ£¬ÔòÐÂÔö£¬Ò²¾ÍÊÇsaveOrUpdate²Ù×÷¡£ÕâÖÖ¿ØÖÆ¿ÉÒÔ·ÅÔÚÒµÎñ²ã£¬Ò²¿ÉÒÔ·ÅÔÚÊý¾Ý¿â²ã£¬´ó¶àÊýÊý¾Ý¿â¶¼Ö§³ÖÕâÖÖÐèÇó£¬ÈçOracleµÄmergeÓï¾ä£¬ÔÙÈç±¾ÎÄËù½²µÄMySQLÖеÄINSERT ... ON DUPLICATE KEY UPDATEÓï¾ä¡£
¸ÃÓï¾äÊÇ»ùÓÚΨһË÷Òý»òÖ÷¼üʹÓ㬱ÈÈçÒ»¸ö×Ö¶Îa±»¼ÓÉÏÁËunique index£¬²¢ÇÒ±íÖÐÒѾ´æÔÚÁËÒ»Ìõ¼Ç¼ֵΪ1£¬ÏÂÃæÁ½¸öÓï¾ä»áÓÐÏàͬµÄЧ¹û£º
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE table SET c=c+1 WHERE a=1;ON DUPLICATE KEY UPDATEºóÃæ¿ÉÒԷŶà¸ö×ֶΣ¬ÓÃÓ¢ÎĶººÅ·Ö¸î¡£Ê¹ÓÃON DUPLICATE KEY UPDATE£¬×îÖÕÈç¹û²åÈëÁËÒ»¸öÐÂÐУ¬ÔòÊÜÓ°ÏìµÄÐÐÊýÊÇ1£¬Èç¹ûÐÞ¸ÄÁËÒÑ´æÔÚµÄÒ»ÐÐÊý¾Ý£¬ÔòÊÜÓ°ÏìµÄÐÐÊýÊÇ2¡£
Èç¹û×Ö¶ÎbÒ²±»¼ÓÉÏÁËunique index£¬Ôò¸ÃÓï¾äºÍÏÂÃæµÄupdateÓï¾äÊǵÈЧµÄ£º
UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;Èç¹ûa=1 OR b=2Æ¥ÅäÁ˶àÐУ¬ÔòÖ»ÓÐÒ»ÐлᱻÐ޸ġ£Í¨³£µÄ£¬ÔÚON DUPLICATE KEY UPDATEÓï¾äÖУ¬ÎÒÃÇÓ¦¸Ã±ÜÃâ¶à¸öΨһË÷ÒýµÄÇé¿ö¡£Èç¹ûÐèÒª²åÈë»ò¸üжàÌõÊý¾Ý£¬²¢ÇÒ¸üеÄ×Ö¶ÎÐèÒª¸ù¾ÝÆäËü×Ö¶ÎÀ´ÔËËãʱ£¬¿ÉÒÔʹÓÃÈçÏÂÓï¾ä£º
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);ÔÚON DUPLICATE KEY UPDATEºóÃæÊ¹ÓÃVALUES()·½·¨£¬Õâ¸öÓï¾äµÈͬÓÚÏÂÃæµÄÁ½¸öÓï¾ä£º
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3;--1+2 INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=9;--4+5Èç¹ûÒ»¸ö±íÖаüº¬ÁËÒ»¸öauto_incrementµÄ×ֶΣ¬Ã¿´ÎinsertÊý¾Ýºó£¬¿ÉÒÔͨ¹ýlast_insert_id()·½·¨·µ»Ø×îºó×Ô¶¯Éú³ÉµÄÖµ£¬Èç¹ûͨ¹ýINSERT ... ON DUPLICATE KEY UPDATEÓï¾äÐÞ¸ÄÁËÒ»ÌõÊý¾Ý£¬ÄÇôÔÙͨ¹ýlast_insert_id()·½·¨»ñÈ¡µÄÖµ½«²»ÕýÈ·£¬Êµ¼Ê²âÊÔÖÐÊǶàÁËÒ»¸öÊý£¬±ÈÈçÏò±íÖÐÔö¼ÓÁË3ÌõÊý¾Ý£¬ÄÇôͨ¹ýlast_insert_id()·½·¨µÃµ½µÄÖµÊÇ3£¬µ«ÊÇͨ¹ý¸ÃÓï¾äÐÞ¸ÄÁËÒ»ÌõÊý¾Ýºó£¬Í¨¹ýlast_insert_id()·½·¨µÃµ½µÄÖµÊÇ4¡£Èç¹ûÏë½â¾ö¸ÃÎÊÌ⣬¿ÉÒÔͨ¹ýÈçÏÂÓï¾ä£º
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
ÖØµãÊÇÕâ¾äid=LAST_INSERT_ID(id)¡£