mysql通过存储过程从带限制的更新查询中获取行数据

am46iovg  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(263)

我有一个查询,它用变量限制更新表中的多行。我需要从更新的行中获取数据,以便知道哪些行受到了影响。我写了一个简单的程序:

DELIMITER $$
CREATE PROCEDURE select_update(IN myId INT, IN myAttr VARCHAR(10), IN myAmount MEDIUMINT)
begin
  SELECT data FROM mytable WHERE id IS NULL AND attr = myAttr LIMIT myAmount;
  UPDATE mytable SET id = myId WHERE id IS NULL AND attr = myAttr LIMIT myAmount;
end$$
DELIMITER ;

这个select语句是否总是返回update语句影响的完全相同的行?另一个用户是否可能在运行此过程时执行查询,从而可能更改select和update之间受影响的行?

mxg2im7a

mxg2im7a1#

创建一个临时表来保存要更新的行的主键。

CREATE PROCEDURE select_update(IN myId INT, IN myAttr VARCHAR(10), IN myAmount MEDIUMINT)
begin
  CREATE TEMPORARY TABLE temp_mytable AS
  SELECT pk FROM mytable WHERE id IS NULL AND attr = myAttr LIMIT myamnt;
  UPDATE mytable JOIN temp_mytable USING (pk)
  SET mytable.id = myId;
  SELECT mytable.data
  FROM mytable JOIN temp_mytable USING (pk);
end$$

相关问题