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********')