1.NSERT ... ON DUPLICATE KEY UPDATE (mysql独有 )
INSERT INTO table_name (id, name, value)
VALUES (1, 'A', 150)
ON DUPLICATE KEY UPDATE value = value + 1, name= VALUES(name);
2.REPLACE
REPLACE INTO users (id, name, age) VALUES (123, '赵本山', 50);
NSERT ... ON DUPLICATE KEY UPDATE ...的性能通常比REPLACE INTO好。
INSERT ... ON DUPLICATE KEY UPDATE ...的性能通常比REPLACE INTO好。
-
性能优化:
INSERT ... ON DUPLICATE KEY UPDATE ...
操作主要是更新操作,数据库可以更有效地优化这类操作,尤其是在涉及大量数据时。这种操作通过减少必要的操作和更高效地处理索引来优化性能,因此通常比REPLACE INTO
更快1。 -
操作方式:
REPLACE INTO
首先尝试插入数据到表中。如果发现表中已经有此行数据(根据主键或唯一索引判断),则先删除此行数据,然后插入新的数据。这种方式在处理重复键时会涉及到数据的删除和重新插入,可能会对性能产生影响。相比之下,INSERT ... ON DUPLICATE KEY UPDATE ...
在遇到重复键时,只执行更新操作,不会删除原有数据,从而避免了不必要的全表扫描和数据重建,提高了性能2。 -
适用场景:在实际业务场景中,当需要更新或插入部分列的数据时,应使用
INSERT ... ON DUPLICATE KEY UPDATE ...
,因为它允许只更新或插入部分列的数据,而不会像REPLACE INTO
那样删除其他列的原有值。这在使用外键约束或需要保留原有数据的情况下尤为重要2。
综上所述,虽然REPLACE INTO
在语法上可能更简单易读,但在需要高性能和数据完整性的场景下,INSERT ... ON DUPLICATE KEY UPDATE ...
因其更高的性能和更灵活的数据处理方式而更受推荐。