Mysql upsert后删除未更新的行

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期间更新该列

我有一个包含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期间更新该列。然后删除不包含最新编号的行


还有什么我能做的吗?这不需要额外的一列或两个查询?

可能您可以通过创建一个过程来完成

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唯一的选项是使用带有参数的过程@Ανα∑τ∑η∑ηςνΔρονίΔη我已经更新了答案,请检查并让我知道