mysql - REPLACE 是否有可能在 INSERT 上失败?
问题描述
我有一个要插入记录的表。它有一个由两个字段组成的主键。到目前为止,我的语法很简单:
INSERT into table (
field ,
field ,
field ) VALUES ('foo', 'bar', foo')
type deal,但我遇到了可能需要覆盖现有值的场景。
我很熟悉,过去也使用过这种INSERT INTO .... ON DUPLICATE KEY UPDATE...
语法,但最近我遇到了更简单的REPLACE INTO...
语法。
我对此的假设REPLACE INTO
是,如果我正在写入的主键不存在数据,它将充当 INSERT。但是,如果主要确实存在,它将删除记录并插入新记录。这个对吗?
如果这是正确的,那么我只是放弃该INSERT INTO...
语句并运行REPLACE INTO...
100% 的用户插入表中的行有什么缺点吗?使用REPLACE INTO...
100% 的时间是否有任何潜在风险?
解决方案
REPLACE 首先执行 DELETE,因此如果您将外键约束与 ON DELETE CASCADE 一起使用,您可能会无意中删除大量相关数据。REPLACE 的重新插入步骤不会恢复从依赖表中删除的数据。
我想我已经看到了 REPLACE 导致为主键生成新的自动增量值的情况。也许如果冲突基于辅助 UNIQUE KEY 而不是主键,即使您不使用外键约束,也可能会抛出对该行的其他引用。
推荐阅读
- laravel - 使用棘轮 websocket 部署 Laravel Vue 应用程序
- vue.js - 如何修复“结果中缺少产品属性”
- c++ - 如何在 C++ 中以最佳方式循环遍历类成员向量的元素?
- html - 部分链接无法在标签中下载
- java - 使用springboot和entitygraph序列化对象时如何忽略fetch lazy
- bash - 如何解决错误“读取:非法选项 -d”。我希望在 sh 下运行它。有没有替代路线
- r - 如何使用 R 中的递归创建长度为 n 的所有 2^n 二进制序列的矩阵?
- javascript - 如何将 formData 中的裁剪图像发送到 PHP
- julia - 在 Julia 中克隆一个函数
- google-analytics - 查看多个站点的 Google Analytics(分析)数据?