是否有可能在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是正确的。但基本上你需要先获取数据,然后增加它,然后更新。最后,您在更新之前获得了增加的变量,因此您可以使用它。