批量插入時,需要校驗該值是否存在在插入

2021-09-11 02:01:51 字數 1306 閱讀 3454

廢話不多說,直接上解決方案

ignore是mysql相對於標準sql的擴充套件。如果在新錶中有重複關鍵字,此種方法效率比較高,判斷是否存在,存在會丟棄掉這行資料,不做任何插入,否則插入。當插入資料時,如出現錯誤時,如重複資料,將不返回錯誤,只以警告形式返回。所以使用ignore請確保語句本身沒有問題,否則也會被忽略掉。這樣不用校驗是否存在了,有則忽略,無則新增。例如:

當primary或者unique重複時,則執行update語句,如update後為無用語句,如id=id,則同1功能相同,但錯誤不會被忽略掉。例如,為了實現重複的資料插入不報錯,可使用一下語句:

如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。如果列b也是唯一列,則insert與此update語句相當。

您可以在update子句中使用values(col_name)函式從insert...update語句的insert部分引用列值。換句話說,如果沒有發生重複關鍵字衝突,則update子句中的values(col_name)可以引用被插入的col_name的值。本函式特別適用於多行插入。values()函式只在insert...update語句中有意義,其它時候會返回null。例如:

根據select的條件判斷是否插入,可以不光通過primary 和unique來判斷,也可通過其它條件。例如:

需求表中有primarykey,或者unique索引,如果資料庫已經存在資料,則用新資料替換,如果沒有資料效果則和insert into一樣。(此種方法是利用替換的方法,有點似類於先刪除再插入。如果存在primary or unique相同的記錄,則先刪除掉。再插入新記錄。

replace語句會返回乙個數,來指示受影響的行的數目。該數是被刪除和被插入的行數的和。如果對於乙個單行replace該數為1,則一行被插入,同時沒有行被刪除。如果該數大於1,則在新行被插入前,有乙個或多個舊行被刪除。如果表包含多個唯一索引,並且新行複製了在不同的唯一索引中的不同舊行的值,則有可能是乙個單一行替換了多個舊行。

注:replace發現重複的先刪除再插入,如果記錄有多個字段,在插入的時候如果有的字段沒有賦值,那麼新插入的記錄這些欄位為空。

插入時沒有預設值問題

因為使用的 生成器,在插入時,空引數傳遞的時候會出現 沒有預設值的異常。找到private static void preparecommand oledbcommand cmd,oledbconnection conn,oledbtransaction trans,string cmdtext,o...

關於批量插入時觸發器的使用

終於突破這個關口了。兩天半時間沒有白費。批量插入時,主要使用 游標遍歷資料庫實現 建立測試表 if exists select from dbo.sysobjects where id object id n dbo 實際銷售表 and objectproperty id,n isusertable...

MySql進行批量插入時的幾種sql寫法

insert into 插入資料,如果主鍵重複,則報錯 insert repalce 插入替換資料,如果存在主鍵或unique資料則替換資料 insert ignore 如果存在資料,則忽略。insert ignore into actor values 3,ed chase 2006 02 15 ...