我已经通过添加UNIQUE CONSTRAINT来改变我的表,以避免插入重复的记录,但是现在我遇到了INSERT的问题,当它在表中遇到重复并抛出错误时,这会破坏我的代码。
ALTER TABLE `t1` ADD UNIQUE `unique_index`(`user`, `email`);
有没有一种方法可以修改查询,在发现重复索引时忽略插入并转到另一个插入,因为我是通过多值循环来执行的?或者我需要先添加一个SELECT查询来检查是否存在重复,这似乎效率很低?
我的当前查询看起来像:
INSERT INTO t1 (`user`, `email`)
VALUES ('".$row['user']."', '".$email."')
1条答案
按热度按时间rm5edbpk1#
可以使用INSERT IGNORE代替INSERT。
但是,使用INSERT IGNORE有时可能会有风险,因为它会忽略所有其他错误,而不仅仅是重复键错误。
更安全的方法是使用INSERT ...在重复密钥更新时。虽然它主要用于对发生键冲突的行执行更新,但您可以使它什么也不做。
此语句插入具有指定值的新行,或者如果某行导致重复键错误,则不执行任何操作并继续到下一行。这是一个更安全的选择,因为它只忽略重复的键错误。其他类型的错误仍然会中断语句并返回错误消息。