考虑这个陈述:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE d=d+1;
我需要d
的值。
是否可以在不再执行SELECT
的情况下获取它?
a,b,c
上有一个唯一索引。这个指数会用于更好的表现吗?该表将包含大量行。
答案 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*/) ;