1. 程式人生 > >MYSQL避免批量插入重複資料報錯的解決方案

MYSQL避免批量插入重複資料報錯的解決方案

        在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
1. REPLACE INTO test(title,uid) VALUES ('1234657','1003');
        此用法和insert一樣,不過當所要插入的資料如果存在的話,他會先刪除已經存在的重複值,而後進行插入,但是如果不存在的話,他會直接插入和普通的inset一樣。

2.    另外在複製表的時候可以使用

 replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;

        向表1中插入三個欄位的值,資料來源是表2查詢出來的資料,至於欄位名是否對應並無關係,MySQL此時只會根據列的對應關係進行插入。

參考來源:參考來源