如何制作 mysql 批量更新存储过程?

how can i make a mysql batch update stored procedure?

所以我想创建一个存储过程来更新一批行。我通常通过在后面的代码中循环存储过程来执行此操作,但这会降低性能。我的问题是如何将参数传递给查询,因为要更改的总行数各不相同。

这是我的单行更新存储过程,如何将其转换为处理多于 1 行以及如何将这些行作为参数传递?

DROP PROCEDURE IF EXISTS EditProductType;
DELIMITER $$

CREATE PROCEDURE EditProductType(
  IN productTypeId INT,
  IN NAME VARCHAR(100),
  IN details VARCHAR(1000)
)
BEGIN

UPDATE product_types pt
SET pt.name = NAME,
    pt.details = details
WHERE pt.productTypeId = productTypeId;


END$$

DELIMITER ;

一次 UPDATE 多行是不切实际的,除非

  • WHERE 子句引用多行(没有任何变化)

  • 你有一个 table 的变化,你使用 table UPDATE JOINs 你的 table 和 table.

IODKU

我认为这是一个丑陋的解决方案,但无论如何我都会提出来。

INSERT INTO t (id,b,c)
    VALUES
    (10,'doohickie',3),
    (22,'whatchamacallit',44),
    (98,'doodad',55),
    (34,'thingamabob',56)
ON DUPLICATE KEY UPDATE
    b = VALUES(b),
    c = VALUES(c) ;

假设:

  • idPRIMARY KEY(或 UNIQUE 键)。
  • 您指定的行已经存在;这样,IODKU 的 INSERT 一半就不会被使用,只使用 UPDATE 一半。

如果您在 table temp 中已经有 id,b,c,这会有效(可能更好):

INSERT INTO t (id,b,c)
    SELECT id,b,c  FROM temp
ON DUPLICATE KEY UPDATE
    b = VALUES(b),
    c = VALUES(c) ;