mysql - 在应用程序部分设置 MySQL 唯一键或检查重复项?

标签 mysql sql duplicates unique unique-key

哪个更可靠,性能更好?设置 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/

相关文章:

java - 如何通过全名搜索客户?

MySql数据库和qt

php - 如何在 Sphinx 的一个索引中使用多个来源?

MySQL查找多个子集的模式

ios - POST 请求花费的时间超过超时导致重复

mysql - 生成截断儒略日的 MYSQL 公式是什么?

mysql - 选择每秒最大计数

SQL时间函数

vba - 按行而不是列删除范围中的重复值

java - 如何将不重复的值从一个数组复制到另一个数组?