PHP-MySQL - Как безопасно увеличить целочисленное поле MySQL?


Я хочу безопасно увеличить значение поля, используя php и mysql.

  1. Какой тип таблицы/поля я должен использовать?

  2. Есть ли минимальная версия MySQL, которую я должен использовать?

  3. Каков код sql для этой безопасной транзакции для MySQL?

Author: nullVoid, 2010-01-09

3 answers

Под каким типом "таблицы" я полагаю, вы подразумеваете механизм хранения. Все, что поддерживает мутации (т.е. не "архив" или "черная дыра")

Подойдет любое числовое поле (tinyint, int, float и т.д.). Тем не менее, нет специального кода PHP, только SQL для увеличения нужного поля:

UPDATE table SET field = field + 1 WHERE [...]

Если вам нужна транзакция, то упакуйте приведенный выше запрос в транзакцию. Что касается версии MySQL, я согласен с @hsz - используйте самую последнюю возможную версию.

 74
Author: Chris Tonkinson, 2010-01-09 14:04:00

Если вы говорите о первичном ключе, то установите столбец id как primary и auto_increment.

Увеличивающееся поле выглядит так:

UPDATE table SET field = field + 1 WHERE id = 9

О версии MySQL - используйте самую новую, какую только можете. ;)
> 5.0 все будет хорошо.

 7
Author: hsz, 2010-01-09 13:54:17

1. какой тип таблицы/поля я должен использовать?

--> Тип таблицы зависит от того, что вы запланировали для своего приложения. Это может быть Innodb или Myisam. Я предлагаю вам использовать числовой столбец, чтобы вы могли увеличивать/уменьшать их. Не делайте его НЕПОДПИСАННЫМ, если вы планируете разрешить отрицательные числа.

Вот ограничения, которые могут оказаться полезными при объявлении длины столбца:

TINYINT (length)  - 1 - Integer with unsigned range of 0-255 and a signed range from -128-127
SMALLINT (length)  - 2 - Integer with unsigned range of 0-65535 and a signed range from -32768-32767
MEDIUMINT(length)  - 3 -  Integer with unsigned range of 0-16777215 and a signed range from -8388608-8388607
INT(length)   - 4 - Integer with unsigned range of 0-429467295 and a signed range from -2147483648-2147483647
BIGINT(length)   - 8 -  Integer with unsigned range of 0-18446744 and a signed range from
-9223372036854775808-9223372036854775807

2.is есть минимальная версия MySQL, которую я должен использовать?

-->Просто использовать автоматическое увеличение? Вам хорошо пользоваться обновленной версией. Я предлагаю что-то >5.2.4, если это возможно.

3. каков код sql для этой безопасной транзакции для MySQL?

--> Извините, на данный момент у меня нет ответа на этот вопрос.

 2
Author: Devner, 2010-01-09 14:44:58