哪个更可靠,性能更好?设置 MySQL 唯一键并使用 INSERT IGNORE 还是首先检查数据库中是否存在数据并根据结果进行操作?
如果答案是第二个,有什么方法可以进行单个 SQL 查询而不是两个?
更新:我问是因为我所在公司的同事认为处理此类问题应该在他们认为更可靠的应用程序部分完成。
最佳答案
您的应用程序不会捕获重复项。
两个并发调用可以插入相同的数据,因为当您的应用程序检查唯一性时,每个进程都看不到另一个。每个进程都认为可以插入。
您可以强制执行某种序列化,但那样就会遇到瓶颈和性能限制。而且您将让其他客户端写入数据库,即使它只是一个发布脚本-
这就是为什么普遍存在诸如唯一索引和约束之类的东西的原因。外键、触发器、检查约束、NULL/NIOT NULL、数据类型约束都是为了保证数据的完整性
还有一些代码猴子认为他们可以做得更好的傲慢态度。
参见 programmers.se:Constraints in a relational databases - Why not remove them completely?还有这个Enforcing Database Constraints In Application Code (所以)
关于mysql - 在应用程序部分设置 MySQL 唯一键或检查重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076461/