在执行INSERT包含许多行的语句时,我想跳过可能导致失败的重复条目.经过一些研究,我的选择似乎是使用:
ON DUPLICATE KEY UPDATE 这意味着需要花费一些不必要的更新,或者 INSERT IGNORE 这意味着邀请其他类型的未能在未经宣布的情况下失败. 我对这些假设是对的吗?简单地跳过可能导致重复的行并继续执行其他行的最佳方法是什么?
我开始使用谷歌搜索,发现这篇文章讨论了互斥表.
我有一张约有1400万条记录的表格.如果我想以相同的格式添加更多数据,有没有办法确保我想要插入的记录不存在而不使用一对查询(即,一个查询要检查,一个要插入是结果集是空)?
unique对某个字段的约束是否保证insert如果它已经存在则会失败?
似乎只有一个约束,当我通过php发出插入时,脚本呱呱叫.
我想写一个程序向表中添加新项.这个项目有一个唯一的密钥name,它可以由100个线程中的一个创建,所以我需要确保它只插入一次.
我有两个想法:
使用 insert ignore
如果没有返回的行,则从数据库中获取它select然后insert再到表.
哪个选项更好?有更优越的想法吗?
我曾经被告知,运行插入并让插入失败比检查数据库条目是否存在然后插入(如果它丢失)更快.
我还被告知,大多数数据库都经过大量优化,无法读取阅读而不是写入,因此快速检查不会比慢速插入快吗?
这是预期碰撞次数的问题吗?(IE只有在条目已经存在的可能性很小的情况下插入才会更快.)它是否依赖于我正在运行的数据库类型?就此而言,有一种方法会不断向我的错误日志中添加插入错误,这是不好的做法吗?
谢谢.
我有一个有3列的表.每个都有一个独特的索引.
我想一次做多个插入(300个记录弹出).当出现重复条目时,它会完全取消插入.这意味着如果300中的1个是重复的,则不会插入任何一个.
有没有解决的办法?
mysql ×5
insert ×3
performance ×2
sql ×2
database ×1
duplicates ×1
optimization ×1
oracle ×1
php ×1
primary-key ×1
sql-server ×1