PHP-MySQL-comment incrémenter en toute sécurité un champ entier MySQL?

je veux incrémenter une valeur de champ en toute sécurité en utilisant php et mysql.

  1. quel type de table/champ dois-je utiliser?

  2. y a-t-il une version minimale de MySQL que je dois utiliser?

  3. Quel est le code sql pour ceci, transaction sécurisée pour MySQL?

41
demandé sur nullVoid 2010-01-09 16:50:27

3 réponses

par quel type de "table" je suppose que vous voulez dire moteur de stockage. Tout ce qui supporte des mutations (c.-à-d. pas "archive" ou "trou noir")

N'importe quel champ numérique fera l'affaire (tinyint, int, float, etc.). Cela dit, il n'y a pas de code PHP spécial, juste le SQL pour incrémenter le champ désiré:

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

Si vous voulez une transaction, puis mettez-la requête ci-dessus dans une transaction. Quant à la version MySQL, je suis d'accord avec @hsz - utilisez la version la plus récente possible.

74
répondu Chris Tonkinson 2010-01-09 14:04:00

Si vous parlez de la clé primaire puis définissez id colonne primary et auto_increment.

Increasing field ressemble à cela:

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

A propos de la version MySQL - utilisez la plus récente que vous pouvez. ;)

> 5.0 fera l'affaire.

7
répondu hsz 2010-01-09 13:54:17

1.quel type de tableau/champ dois-je utiliser?

--> le type de tableau dépend de ce que vous avez prévu pour votre application. Ça pourrait être Innodb ou Myisam. Je vous suggère d'utiliser la colonne numérique pour que vous puissiez les incrémenter/les décrémenter. Ne le faites pas non signé si vous prévoyez d'autoriser des nombres négatifs.

Voici les limites que vous pourriez trouver utiles pour déclarer la longueur de votre colonne:

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.y at-il une version minimale de MySQL je dois utilisez?

--> Juste à utiliser l'auto-incrément? Vous êtes bien placé pour utiliser une version à jour. Je suggère quelque chose > 5.2.4, si c'est possible.

3.Quel est le code sql pour cette transaction sécurisée pour MySQL?

--> Désolé, ne pas avoir de réponse pour le moment.

2
répondu Devner 2010-01-09 14:44:58