mysql - 覆盖数据库中的唯一行 - 这种方法是错误的吗?

标签 mysql database database-design insert mysql-error-1064

我每天需要写入数据库 15k 个对象。我每天晚上都使用 cronjob 写入 mysql 服务器。每天晚上,这 15k 个对象中的 99% 都是相同的,并且在数据库中被唯一标识。

我已经设置了一条数据库规则,声明通过指定唯一键不会出现重复行。

我不想在实际插入之前检查现有行。

因此,我选择每晚插入所有 15k 对象并允许 mysql 防止重复行...(当然它会抛出错误)。

我这样做是因为如果我检查预先存在的行 - 它会显着降低速度。

我的问题:一次插入所有15k并允许mysql防止重复有什么问题吗? (无需手动检查预先存在的行)是否存在一个阈值,如果 mysql 错误 1,000 次,它将锁定自身并拒绝所有后续查询?

请帮忙!

最佳答案

使用INSERT IGNORE INTO...将使MySQL无错误地丢弃该行并保留该行已存在。也许这就是你想要的?

如果您想覆盖现有行,您可以执行INSERT INTO ... ON DUPLICATE KEY UPDATE ...。参见 docs

关于mysql - 覆盖数据库中的唯一行 - 这种方法是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522021/

相关文章:

mysql - 在 MySQL 中查找列创建时间

database - MongoDB - 查找多个字段不存在于另一个集合中的文档

php - 无法仅在 cPanel 上连接到数据库

php - 一个系统的多个数据库与单个数据库

arrays - JSONB 会使 PostgreSQL 数组变得无用吗?

mysql - SQL,如何计算范围内的行数

mysql - 构建一个预订网站

database-design - 在像 Redis 这样的键/值数据库中对数据进行分组

mysql - 我如何在不使用 ALL 的情况下写这个?

database - Clojure 的嵌入式(纯 Java)数据库