場景:向已有的數據庫中插入大量不重複數據。
向數據庫中插入大量數據時,需要判斷插入的數據是否重複,然後再決定插入與否,如何提高效率?
1.一般的插入方法:INSERT INTO
在數據庫中把某字段設置成唯一索引,當數據重複時,這是會報錯,要向忽略這個錯誤,那麼應將插入語句寫在try....except...中
2.忽略重複數據:INSERT IGNORE INTO
如果不想顯示的去寫try...except,那麼這條語句很適合你,插入數據時,若出現錯誤或重複數據,將不返回錯誤,只以警告形式返回。所以使用ignore請確保語句本身沒有問題,否則也會被忽略掉
3.INSERT IGNORE INTO ......ON DUPLICATE KEY UPDATE
當primary或者unique重複時,則執行update語句,如update後爲無用語句,如id=id.
4.INSERT INTO ...SELECT ... WHERE NOT EXIST
根據select的條件判斷是否插入,可以不光通過primary 和unique來判斷,也可通過其它條件。這種方法其實就是使用了mysql的一個臨時表的方式,但是裏面使用到了子查詢,效率也會有一點點影響,如果能使用上面的就不使用這個
5.REPLACE INTO
如果存在primary or unique相同的記錄,則先刪除掉。再插入新記錄。這種方法就是不管原來有沒有相同的記錄,都會先刪除掉然後再插入