<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Mysql批量插入數(shù)據(jù)時(shí)如何解決重復(fù)問(wèn)題?

          共 2468字,需瀏覽 5分鐘

           ·

          2022-06-13 09:10

          基本用法:on dupdate key update 語(yǔ)句基本功能是:當(dāng)表中沒(méi)有原來(lái)記錄時(shí),就插入,有的話就更新。


          1,on duplicate key update 語(yǔ)句根據(jù)主鍵id或唯一鍵來(lái)判斷當(dāng)前插入是否已存在。

          2,記錄已存在時(shí),只會(huì)更新on duplicate key update之后指定的字段。

          3,如果同時(shí)傳遞了主鍵和唯一鍵,以主鍵為判斷存在依據(jù),唯一鍵字段內(nèi)容可以被修改。

          4,特殊用法:參考第五、第六條。


          一、構(gòu)造測(cè)試數(shù)據(jù)


          注意里面的唯一鍵


          #創(chuàng)建表
          drop table if exists tbl_test;
          create table tbl_test(
          id int primary key auto_increment,
          name varchar(30unique not null,
          age int comment '年齡',
          address varchar(50comment '住址',
          update_time datetime default current_timestamp on update current_timestamp
          comment '測(cè)試表';

          #插入語(yǔ)句 來(lái)源【碼農(nóng)編程進(jìn)階筆記】
          insert into tbl_test(name,age,address) values('huahua',20,'京華市'),('caocao',21,'京海市');

          效果如下:


          二、sql用法介紹

          on dupdate key update 語(yǔ)句基本功能是:當(dāng)表中沒(méi)有原來(lái)記錄時(shí),就插入,有的話就更新。


          如下sql:

          insert into tbl_test(id,name,age,address) values(1,'huahua1',201,'京華市1')

          on duplicate key update

          age = values(age),

          address = values(address);


          從執(zhí)行結(jié)果可以看出,更新了id為1的age,address兩個(gè)字段,而name字段沒(méi)有修改生效。由此我們可以得出兩個(gè)重要結(jié)論:

          1. on duplicate key update 語(yǔ)句根據(jù)主鍵id來(lái)判斷當(dāng)前插入是否已存在。

          2. 已存在時(shí),只會(huì)更新on duplicate key update之后限定的字段。


          三,sql用法介紹2

          如下sql:

          insert into tbl_test(name,age,address) values('huahua',202,'京華市2')
          on duplicate key update
          age = values(age),
          address = values(address);



          從執(zhí)行結(jié)果看,這次沒(méi)有傳id,但是age,address字段仍然更新了。

          由此可以得出另一個(gè)結(jié)論:

          3. on duplicate key update 語(yǔ)句也可以根據(jù)唯一鍵來(lái)判斷當(dāng)前插入的記錄是否已存在。


          三、sql用法介紹

          如下sql:

          insert into tbl_test(name,age,address) values('huahua2',202,'京華市2')
          on duplicate key update
          age = values(age),
          address = values(address);


          這條執(zhí)行就比較簡(jiǎn)單了,沒(méi)有主鍵或唯一鍵字段值相同,即判斷當(dāng)前記錄不存在,新插入一條。


          四、sql用法介紹

          如下sql:

          insert into tbl_test(id,name,age,address) values(1,'huahua1',202,'京華市2')
          on duplicate key update
          name = values(name),
          age = values(age),
          address = values(address);


          從上面可以看出,連唯一鍵name也被修改了。結(jié)論:

          4.如果傳遞了主鍵,是可以修改唯一鍵字段內(nèi)容的。


          這里要注意,如果這里的name修改為 caocao,huahua2

          會(huì)報(bào)唯一鍵沖突的。可以自行嘗試。


          五,on dupdate key update之后沒(méi)有用values的情況

          分為兩種情況:

          1,如果為如上面的name = "abc",則會(huì)一直更新為"abc".

          2,如果為如上面的name = name ,則name會(huì)保持?jǐn)?shù)據(jù)庫(kù)中的值,不會(huì)更新。


          六,對(duì)values使用判斷

          如下sql

          #來(lái)源公眾號(hào):【碼農(nóng)編程進(jìn)階筆記】
          insert into tbl_test(id,name,age,address) values(1,'huahua1',202,'京華市2')
          on duplicate key update
          name = ifnull(values(name),name),
          age = values(age);


          達(dá)到的效果是,如果傳入的name值為null,則不更新。不為null則更新。這里與mybatis配合使用比較好。

          瀏覽 75
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黑人探花 | 亚洲视频在线视频播放 | www.亚洲黄色 | 91精品国际 | 五月综合视频 |