我可以更新INT值+ 1并返回新值吗?


Can I update an INT value + 1 and return the new value?

是否有可能在MySQL+PHP中增加INT值并在一个查询中返回新值?

$sql = mysql_query("UPDATE table SET number=number+1 WHERE id='uniqid'");
$updated_number = ???

或者我需要发布另一个查询?

SELECT number FROM table WHERE id='uniqid'

简单的回答——不,这是不可能的。

更详细的回答是可以,如果您使用一个存储过程,该存储过程对指定的ID的值加1,检索新值并返回它。

我刚刚在MySQL 5.1.59下测试了这个:

CREATE PROCEDURE increment (IN uniqid VARCHAR(255))
BEGIN
   UPDATE `table` SET number = number + 1 WHERE id = uniqid;
   SELECT number FROM `table` WHERE id = uniqid;
END

用法:

CALL increment(uniqid)

如果多个并发访问是可能的,你可能希望先LOCK表,以确保操作的原子性- MySQL显然不允许存储过程锁表自己

No。您需要在

之后选择该行

没有程序就没有办法。您可以将新值存储在会话变量中,并从下一条语句中获取。

UPDATE table SET number = (@next_value:= number + 1) WHERE id = 'uniqid';ant:

选择@next_value;

您的会话变量不受其他增量的影响。

你可以做

status = mysql_query(mysql,
                     "UPDATE table SET number=number+1 WHERE id='uniqid';'
                      SELECT FROM table WHERE id='uniqid';'
                     ");

,用mysql_next_result()得到结果

@luvPlsQL是正确的。但基本上你需要先获取数据,然后增加它,然后更新。最后,您在更新之前获得了增加的变量,因此您可以使用它。