我有一张表,我将记录插入其中。它有一个由两个字段组成的主键。到目前为止,我的语法很简单:
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...
是否存在任何潜在风险?
答案 0 :(得分:0)
REPLACE首先执行DELETE,因此如果对ON DELETE CASCADE使用外键约束,则可能会无意中删除大量相关数据。 REPLACE的重新插入步骤不会恢复从依赖表中删除的数据。
我想我已经看到了REPLACE导致为主键生成新的自动增量值的情况。也许如果冲突是基于辅助UNIQUE KEY而不是主键,即使您不使用外键约束,也可能会抛弃对该行的其他引用。