Mysql upsert后删除未更新的行
我有一个包含3行的表,如:Mysql upsert后删除未更新的行,mysql,sql,Mysql,Sql,我有一个包含3行的表,如: P_K, Group, Name, Age: 1, 1, Alice, 35 2, 1, Bob, 40 3, 2, Eva, 19 4, 2, Carl, 20 我希望(如果可能的话)通过1个MySQL查询来更新Alice的年龄并删除Bob 我的第一种方法是对组1执行删除查询,然后插入我想要的行。(1、爱丽丝,36岁) 后来我发现了另一种方法,即添加一个带有时间戳或数字的额外列,并在upsert期间更新该列
P_K, Group, Name, Age:
1, 1, Alice, 35
2, 1, Bob, 40
3, 2, Eva, 19
4, 2, Carl, 20
我希望(如果可能的话)通过1个MySQL查询来更新Alice的年龄并删除Bob
我的第一种方法是对组1执行删除查询,然后插入我想要的行。(1、爱丽丝,36岁)
后来我发现了另一种方法,即添加一个带有时间戳或数字的额外列,并在upsert期间更新该列。然后删除不包含最新编号的行
还有什么我能做的吗?这不需要额外的一列或两个查询?可能您可以通过创建一个过程来完成
CREATE PROCEDURE example
BEGIN
UPDATE table SET table.something=1 WHERE table.something=x;
DELETE FROM table WHERE table.something=Y;
END;
EXECUTE example;
我不知道它是否有效,只是尝试一下
另一种解决方案,因为您不知道“Y”的值(如上代码所示)
带参数的程序
CREATE PROCEDURE example @Y <datatype> //varchar(20)
BEGIN
UPDATE table SET table.something=1 WHERE table.something=x;
DELETE FROM table WHERE table.something=y;
END;
EXECUTE example @Y='value';
创建过程示例@Y//varchar(20)
开始
更新table SET table.something=1,其中table.something=x;
从表中删除,其中table.something=y;
结束;
执行示例@Y='value';
您还有其他列要引用吗?您没有唯一标识符或主键吗?对不起。我只是简单地假设有一个主键输出,您不能在一个查询中完成这项工作。为同一个查询创建一个过程如何?在开始…更新和删除语句下将出现@Strawberry我必须知道y参数才能运行此操作:/I可能不知道我必须删除多少行:/thn唯一的选项是使用带有参数的过程@Ανα∑τ∑η∑ηςνΔρονίΔη我已经更新了答案,请检查并让我知道