在ON DUPLICATE KEY UPDATE之后查找列的值

时间:2011-04-15 01:20:00

标签: mysql

考虑这个陈述:

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

我需要d的值。

是否可以在不再执行SELECT的情况下获取它?

a,b,c上有一个唯一索引。这个指数会用于更好的表现吗?该表将包含大量行。

1 个答案:

答案 0 :(得分:0)

假设您将使用相同的连接运行两个查询,您可以使用LAST_INSERT_ID(expr)函数设置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*/) ;