使用 INSERT...ON DUPLICATE KEY UPDATE 对多列执行 UPSERT
执行 UPSERT 操作(插入新行或更新现有行)行),同时在更新部分容纳新值和现有值,INSERT...ON DUPLICATE KEY UPDATE 语句是常用的。此技术允许您根据具有指定主键的记录是否存在来处理不同的场景。
简单示例
考虑一个名为 Item 的表,其中包含 Item_Name 列(主键)和包含库存计数的 Items_In_Stock。接收商品时,应用以下逻辑:
一种简单的方法是在 UPDATE 部分中使用多个 SELECT 语句来检索现有计数,如下例所示:
INSERT INTO `item` (`item_name`, items_in_stock) VALUES('A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A')
改进的解决方案
但是,这种方法可能过于复杂。 PostgreSQL 允许您直接在 UPDATE 子句中引用触发 ON DUPLICATE KEY 条件的行的值。因此,您可以将语句简化如下:
INSERT INTO `item` (`item_name`, items_in_stock) VALUES( 'A', 27) ON DUPLICATE KEY UPDATE `new_items_count` = `new_items_count` + 27
这种优化的语句避免了额外的 SELECT 查询的开销,使代码更加简洁和优雅。
以上是如何在SQL中高效执行多列UPSERT操作?的详细内容。更多信息请关注PHP中文网其他相关文章!