Mysql 在重复键更新后查找列的值

Mysql 在重复键更新后查找列的值,mysql,Mysql,考虑一下这句话: INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE d=d+1; 我需要d的值 是否可以在不执行进一步选择的情况下获得它 在a、b、c上有一个唯一的索引。该指数是否用于更好的性能?此表将有大量行。假设您将使用相同的连接运行两个查询,您可以使用LAST_INSERT_IDexpr函数设置当前值d,并将LAST_INSERT_ID的值与ROW_COUNT函数一起检查,以确定记录是否已插入或更新: INS

考虑一下这句话:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE d=d+1;
我需要d的值

是否可以在不执行进一步选择的情况下获得它


在a、b、c上有一个唯一的索引。该指数是否用于更好的性能?此表将有大量行。

假设您将使用相同的连接运行两个查询,您可以使用LAST_INSERT_IDexpr函数设置当前值d,并将LAST_INSERT_ID的值与ROW_COUNT函数一起检查,以确定记录是否已插入或更新:

INSERT INTO table (a,b,c)
VALUES (1,2,3)
ON DUPLICATE KEY UPDATE d = LAST_INSERT_ID(d + 1);

SELECT IF(ROW_COUNT() = 2, LAST_INSERT_ID(), 0 /*default value*/) ;
您还可以使用会话变量:

INSERT INTO table (a,b,c)
VALUES (1,2,3)
ON DUPLICATE KEY UPDATE d = @tmp := (d + 1);

SELECT IF(ROW_COUNT() = 2, @tmp, 0 /*default value*/) ;

你可以在存储过程中这样做,但我知道没有办法从同一个语句中得到它。如果你有复合唯一索引a+b+c,那么你的查询有时可能会失败,当c=c+1没有进行唯一组合时。哦,你是对的,不是c,是另一个字段,例如D