MySQL 避免重複插入時如何寫SQL

table示例:chi_variant_words_lib(中文變義詞詞表)

假設紅色部分爲我在代碼中需要插入的部分。

說明:下面的SQL語句示例是我用於Python中的代碼片段,所以使用了%s的寫法,如果直接寫SQL或想要在其他語言中使用只需稍作修改。

方式1:使用ignore關鍵字

INSERT IGNORE INTO chi_variant_words_lib (original_word, variant_word, is_need_validated, createTime) VALUES (%s,%s,%s, NOW())

注意:使用該方法有前提條件,即插入的記錄必須有用主鍵primary或者唯一索引unique區分了記錄的唯一性的字段。

方法2:使用insert … select … where not exist及虛表dual

INSERT INTO chi_variant_words_lib (original_word, variant_word, is_need_validated, createTime) SELECT %s, %s, %s, NOW() FROM DUAL WHERE NOT EXISTS (SELECT * FROM chi_variant_words_lib WHERE original_word=%s AND variant_word=%s)

注意:這裏插入時可以不光是通過primary 和unique來判斷,也可通過其它非唯一性字段進行是否需要插入的判斷。這種方法更通用,也比較符合我上面的插入需求,所以我最後在代碼中採用的此方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章