在mysql中,想要批量的插入資料到資料庫,會使用這樣的語句
insert
into mytable (title, name, date)
values
('my title',
'my name',
'my date'),(
'another title',
'another name',
'another date'
)
但是如果此時資料庫在這些欄位中存在唯一索引,並且此時想要插入的資料,已經存在。
上面的sql在執行後就會輸出一句因為唯一索引而導致的錯誤,並回滾所有的插入動作。
在實際開發中,往往希望如果存在的就不要插入,不存在的可以插入,那麼此語句能否進行修改,達到目的呢。
答案是肯定的。
在mysql中有乙個關鍵字ignore將此關鍵字放在insert into
中間,變成insert ignore into
,那麼就會實現上面所說的效果。
注意:上面的sql雖然說可以實現資料的差分插入,但是會占用乙個主鍵值。即某一條由於資料已經存在,而沒有插入進去,但是此插入動作本應佔據的主鍵卻不會因為資料沒有插入而不被占用。
同樣具有上面的效果的還有replace into
replace
into test(title,uid) values ('1234657','1003');
此用法和insert一樣,不過當所要插入的資料如果存在的話,他會先刪除已經存在的重複值,而後進行插入,但是如果不存在的話,他會直接插入和普通的inset一樣。
另外在複製表的時候可以使用
replace
into tb1( name, title, mood) select rname, rtitle, rmood from tb2;
MySQL 避免重複資料的批量插入與批量更新
我們在向資料庫裡批量插入資料的時候,會遇到要將原有主鍵或者unique索引所在記錄更新的情況,而如果沒有主鍵或者unique索引衝突的時候,直接執行插入操作。這種情況下,有三種方式執行 直接每條select,判斷,然後insert,毫無疑問,這是最笨的方法了,不斷的查詢判斷,有主鍵或索引衝突,執行u...
mysql批量插入不重複資料
1.設定唯一建 前提是 有唯一建可用,but基本很難有這樣的場景。datum有唯一建。create table datum id int 11 notnull auto increment mid int 11 notnull default 0 rong liang varchar 255 col...
mysql資料庫中避免重複資料插入
首先 資料庫中已經存在重複資料 並且資料量很大 之前並沒有設定重複欄位為唯一索引 需求 修改sql語句在插入時 避免重複插入 網上看了幾個部落格都是設定唯一索引 使用ignore或者replace into 或者on duplicate key update 如果資料存在會觸發更新操作 執行後面語句...