MySQL插入去重

1. 使用 INSERT IGNORE 和 UNIQUE 约束

为表中某个字段添加UNIQUE 约束后,如果表中已经存在这样的数据,再次插入会报错。如果希望处理方式更友好一些,可以为表中的某个字段设置 UNIQUE 约束,并使用 INSERT IGNORE 来尝试插入数据。如果记录违反了 UNIQUE 约束,INSERT IGNORE 会忽略该错误并继续执行。

CREATE TABLE your_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unique_value VARCHAR(255) NOT NULL UNIQUE
    -- 其他字段...
);

INSERT IGNORE INTO your_table (unique_value, -- 其他字段) VALUES ('value_to_check', -- 其他值);
```

2. 使用 INSERT ... ON DUPLICATE KEY UPDATE

这个方法与 INSERT IGNORE 类似,但如果在插入时遇到重复键,它会执行一个 UPDATE 语句。如果你不希望更新任何字段,你可以让 UPDATE 部分不实际更改任何数据。

INSERT INTO your_table (unique_value, -- 其他字段)

VALUES ('value_to_check', -- 其他值)

ON DUPLICATE KEY UPDATE unique_value = unique_value; -- 不实际更改任何内容

3. 使用 INSERT ... SELECT ... WHERE NOT EXISTS

这种方法通过查询数据库来检查是否已经存在具有特定值的记录,如果不存在,则插入新记录。

INSERT INTO your_table (unique_value, -- 其他字段)
SELECT 'value_to_check', -- 其他值
WHERE NOT EXISTS (SELECT 1 FROM your_table WHERE unique_value = 'value_to_check');

示例

-- 根据手机号去重
INSERT INTO driver (driver_code, driver_phone, is_deleted, created_time, updated_time)
select '10000001', '188********', 0, '2024-04-09 17:48:10', '2024-04-09 11:00:19'
where not exists(select 1 from driver where driver_phone = '188********')

4、通过redis等获取分布式锁进行操作

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值