web-dev-qa-db-fra.com

PHP-MySQL-Comment incrémenter en toute sécurité le 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. Existe-t-il une version minimale de MySQL que je dois utiliser?

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

41
John

Par quel type de "table" je suppose que vous entendez le moteur de stockage. Tout ce qui prend en charge les mutations (c'est-à-dire 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 spécial PHP, juste le SQL pour incrémenter le champ souhaité:

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

Si vous souhaitez une transaction, puis regroupez 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
Chris Tonkinson

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

Un champ croissant ressemble à ça:

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

À propos de la version MySQL - utilisez la plus récente possible. ;)
> 5.0 sera bien.

7
hsz

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

-> Le type de table dépend de ce que vous avez prévu pour votre application. Ce pourrait être Innodb ou Myisam. Je vous suggère d'utiliser une colonne numérique pour pouvoir les incrémenter/décrémenter. Ne le rendez 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. existe-t-il une version minimale de MySQL que je dois utiliser?

-> Juste pour utiliser l'incrémentation automatique? Vous vous sentez bien en utilisant 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é, je n'ai pas de réponse pour le moment.

2
Devner