乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

       F2967527 2019-11-04
      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      我們在使用 MySQL 數(shù)據(jù)庫時可能會遇到這種情況。如下Students_hobby_t 表,Id字段為唯一索引,當(dāng)我們使用 INSERT 向 Students_hobby_t 表中寫入一條記錄,且該條記錄的 Id值已存在于表中,則將會拋出主鍵沖突的錯誤。

      當(dāng)然,有時候我們需要使用新記錄的值來覆蓋原來的記錄值。如果使用傳統(tǒng)的做法,則需要必須先使用DELETE 語句刪除原先的記錄,然后再使用 INSERT 寫入新的記錄。

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      REPLACE INTO

      除此之外,在MySQL中提供了一種新的解決方案,那就是 REPLACE INTO 語句。使用REPLACE寫入一條記錄時, 如果發(fā)現(xiàn)表中已經(jīng)有此行數(shù)據(jù)(根據(jù)主鍵或者唯一索引判斷)則先刪除此行數(shù)據(jù),然后插入新的數(shù)據(jù)。否則,直接插入新數(shù)據(jù),避免了在同時使用DELETE和INSERT時添加事務(wù)等復(fù)雜操作了。

      在使用REPLACE時,表中必須存在主鍵索引或唯一索引,而且這個索引所在的字段不能允許空值,否則REPLACE將和INSERT完全一樣的。

      如下,使用REPLACE語句是寫入或更新一條記錄。

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      使用REPLACE寫入或更新多條記錄:

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      REPLACE也可以使用 SET 語句寫入或更新記錄:

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      另外,還支持 REPLACE SELECT 用法,即使用REPLACE SELECT從Students_hobby_o 表中將所有數(shù)據(jù)導(dǎo)入Students_hobby_t 中。這種用法并不要求列名匹配,只關(guān)心字段的位置。

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      如上即為REPLACE INTO語法的三種形式:

      • replace into table(col, …) values(…)
      • replace into table(col, …) select
      • replace into table set col=value, …

      除此之外,我們還需要知道。使用 REPLACE寫入一條記錄后,數(shù)據(jù)庫將返回所影響的行數(shù):

      • 如果返回 1 時,則說明在表中并沒有重復(fù)的記錄。
      • 如果返回 2 時,則說明有一條重復(fù)記錄,數(shù)據(jù)庫先自動使用 DELETE刪除這條記錄,然后再使用INSERT 寫入新的記錄。
      • 如果當(dāng)返回的值大于2 時,則說明存在多個唯一索引,在這種情況下,REPLACE將考慮每一個唯一索引,并對每一個索引對應(yīng)的重復(fù)記錄都刪除,然后再寫入這條新記錄,即有多條記錄被刪除和寫入。

      這里需要注意的是,如果當(dāng)表中存在多個唯一索引時,使用REPLACE需要注意以下情況,假設(shè)有Students_hobby_t 表的Id、Phone都是唯一索引,如下:

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      此時,我們使用REPLACE 語句向Students_hobby_t 中寫入一條記錄。

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      返回結(jié)果如下:

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      此時Students_hobby_t 表數(shù)據(jù)如下:

      MYSQL更新寫入數(shù)據(jù)—不同于INSERT INTO 的REPLACE INTO語法介紹

      我們可以看到,REPLACE將原先的2 條記錄都刪除了,然后將新的記錄寫入。


      UPDATE和REPLACE的區(qū)別

      • 當(dāng)UPDATE 中WHERE 條件沒有匹配到記錄時,不執(zhí)行任何操作。而REPLACE在有重復(fù)記錄時執(zhí)行更新(先刪除后寫入)操作,在沒有重復(fù)記錄時執(zhí)行寫入操作。
      • UPDATE可以選擇性地更新記錄的部分字段,而REPLACE在發(fā)現(xiàn)有重復(fù)記錄時就將這條記錄徹底刪除,再插入新的記錄,即將所有的字段都更新。

      最后,不建議使用REPLACE INTO更新部分字段,可能會導(dǎo)致其它有值字段變?yōu)镹ULL。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多