在MySQL + PHP中是否可以增加INT值并在一个查询中返回新值?
$sql = mysql_query("UPDATE table SET number=number+1 WHERE id='uniqid'");
$updated_number = ???
或者我需要发布另一个查询?
SELECT number FROM table WHERE id='uniqid'
答案 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是对的。但基本上你需要先获取数据,然后再增加数据然后再更新。最后你在更新之前获得了增加的变量,这样你就可以使用它了。