MySQL 避免重复插入时如何写SQL

本文介绍两种在存在重复数据情况下,向数据库插入数据的SQL方法:使用ignore关键字和insert...select...where not exist结合虚表dual。前者适用于有主键或唯一索引的场景,后者更为通用,可通过非唯一字段判断是否插入。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值