在INSERT中REPLACE失败的可能性有多大?

时间:2018-06-15 17:50:11

标签: mysql insert

我有一张表,我将记录插入其中。它有一个由两个字段组成的主键。到目前为止,我的语法很简单:

INSERT into table (字段,字段,字段) VALUES ('foo', 'bar', foo')类型的交易,但我遇到了可能需要覆盖现有值的情况。

我很熟悉,过去使用INSERT INTO .... ON DUPLICATE KEY UPDATE...语法,但我最近遇到了更为简单的REPLACE INTO...语法。

我对此REPLACE INTO的假设是,如果我写入的主键没有数据,则它将充当INSERT。如果主要存在,它将删除记录并插入新记录。这是对的吗?

如果这是正确的,那么只是放弃INSERT INTO...语句并为用户插入表中的100%行运行REPLACE INTO...,是否有任何不足之处?在100%的时间内使用REPLACE INTO...是否存在任何潜在风险?

1 个答案:

答案 0 :(得分:0)

REPLACE首先执行DELETE,因此如果对ON DELETE CASCADE使用外键约束,则可能会无意中删除大量相关数据。 REPLACE的重新插入步骤不会恢复从依赖表中删除的数据。

我想我已经看到了REPLACE导致为主键生成新的自动增量值的情况。也许如果冲突是基于辅助UNIQUE KEY而不是主键,即使您不使用外键约束,也可能会抛弃对该行的其他引用。