廢話不多說,直接上解決方案
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 ...