41 votes

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

Je veux incrémenter la valeur d'un champ en toute sécurité en utilisant php et mysql.

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

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

  3. Quel est le code SQL pour cette transaction sûre pour MySQL ?

74voto

Chris Points 3882

Par type de "table", je suppose que vous voulez dire moteur de stockage. Tout ce qui prend en charge les mutations (c'est-à-dire pas les "archives" ou les "trous noirs").

Tout champ numérique fera l'affaire (tinyint, int, float, etc.). Ceci 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, emballez la requête ci-dessus dans une transaction. Quant à la version de MySQL, je suis d'accord avec @hsz - utilisez la version la plus récente possible.

7voto

hsz Points 46509

Si vous parlez de clé primaire, alors définissez id colonne comme primary y auto_increment .

L'augmentation du champ ressemble à ça :

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

En ce qui concerne la version de MySQL, utilisez la plus récente que vous pouvez ;)
> 5.0 sera bien.

2voto

Devner Points 1160

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. Il peut s'agir d'Innodb ou de Myisam. Je vous suggère d'utiliser des colonnes numériques afin de pouvoir les incrémenter/décrémenter. Ne la rendez PAS UNSIGNED si vous prévoyez d'autoriser les 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 a-t-il une version minimale de MySQL que je dois utiliser ?

--> Juste pour utiliser l'auto-incrément ? Vous avez tout intérêt à utiliser une version plus récente. Je suggère quelque chose > 5.2.4, si c'est possible.

3.Quel est le code SQL pour cette transaction sûre pour MySQL ?

--> Désolé, je n'ai pas de réponse à cette question pour le moment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X