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来判断,也可通过其它非唯一性字段进行是否需要插入的判断。这种方法更通用,也比较符合我上面的插入需求,所以我最后在代码中采用的此方法。

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