Могу ли я обновить значение INT + 1 и вернуть новое значение? - PullRequest
5 голосов
/ 22 ноября 2011

Возможно ли в 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 ]

7 голосов
/ 22 ноября 2011

Нет. Затем вам нужно будет выбрать эту строку

7 голосов
/ 22 ноября 2011

Простой ответ - нет, это невозможно.

Более длинный ответ, да, если вы используете хранимую процедуру, которая увеличивает значение для указанного идентификатора, извлекает новое значение и возвращает его.

Я только что проверил это под 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 не позволяет хранимым процедурам блокировать сами таблицы.

0 голосов
/ 27 января 2015

Есть способ без процедуры.Вы можете сохранить новое значение в переменной сеанса и получить его из следующего оператора.

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

ant затем:

SELECT @next_value;

На вашу переменную сеанса другие инкременты не влияют.

0 голосов
/ 22 ноября 2011

@ luvPlsQL прав.Но в основном вам нужно сначала получить данные, затем увеличить их, а затем обновить.Наконец, перед обновлением вы получили увеличенную переменную, чтобы вы могли ее использовать.

0 голосов
/ 22 ноября 2011

вы можете сделать

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

и используйте mysql_next_result() для получения результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...