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

时间:2011-11-22 18:23:22

标签: php mysql int

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

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

$updated_number = ???

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

SELECT number FROM table WHERE id='uniqid'

5 个答案:

答案 0 :(得分:7)

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

更长的答案,是的,如果您使用增加指定ID值的存储过程,则检索新值并将其返回。

我刚刚在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显然不允许存储过程自己锁定表。

答案 1 :(得分:7)

没有。之后您需要选择该行

答案 2 :(得分:0)

没有手续的方法。您可以将新值存储在会话变量中,并从下一个语句中获取它。

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

然后蚂蚁:

SELECT @next_value;

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

答案 3 :(得分:-1)

你可以做到

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

并使用mysql_next_result()获取结果。

答案 4 :(得分:-2)

@luvPlsQL是对的。但基本上你需要先获取数据,然后再增加数据然后再更新。最后你在更新之前获得了增加的变量,这样你就可以使用它了。