MYSQL避免批量插入重复数据报错的解决方案

本文介绍如何在MySQL中使用IGNORE和REPLACE INTO关键字实现数据的批量插入。当遇到唯一索引冲突时,IGNORE允许跳过已存在的记录,REPLACE INTO则会先删除重复记录再插入新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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

REPLACE INTO test(title,uid) VALUES ('1234657','1003');

此用法和insert一样,不过当所要插入的数据如果存在的话,他会先删除已经存在的重复值,而后进行插入,但是如果不存在的话,他会直接插入和普通的inset一样。

另外在复制表的时候可以使用

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

解释:向表1中插入三个字段的值,数据来源是表2查询出来的数据,至于字段名是否对应并无关系,MySQL此时只会根据列的对应关系进行插入。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值