Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonne INT de type SERIAL

Avec le SGBD Informix, la colonne SERIAL ne changera pas après son insertion; en effet, vous ne pouvez pas du tout mettre à jour une valeur SERIAL. Vous pouvez en insérer un nouveau avec 0 comme valeur - auquel cas une nouvelle valeur est générée - ou vous pouvez insérer une autre valeur. Si l'autre valeur existe déjà et qu'il existe une contrainte unique, cela échouera ; s'il n'existe pas, ou s'il n'y a pas de contrainte d'unicité sur la colonne série, il réussira. Si la valeur insérée est supérieure à la plus grande valeur précédemment insérée, le prochain nombre à insérer sera à nouveau supérieur d'une unité. Si le nombre inséré est plus petit ou négatif, il n'y a aucun effet sur le nombre suivant.

Ainsi, vous pouvez faire votre mise à jour sans changer la valeur - pas de problème. Si vous avez besoin de changer le nombre, vous devrez faire une suppression et une insertion (ou une insertion et une suppression), où l'insertion contient un zéro. Si vous préférez la cohérence et que vous utilisez des transactions, vous pouvez toujours supprimer, puis (ré)insérer la ligne avec le même numéro ou avec un zéro pour déclencher un nouveau numéro. Cela suppose que vous ayez un langage de programmation exécutant le SQL ; Je ne pense pas que vous puissiez modifier ISQL et Perform pour le faire automatiquement.

Donc, à ce stade, je ne vois pas le problème sur Informix.

Avec la version appropriée d'IDS (tout ce qui est pris en charge), vous pouvez également utiliser SEQUENCE pour contrôler les valeurs insérées. Ceci est basé sur la syntaxe et le concept d'Oracle; DB2 le prend également en charge. D'autres SGBD ont d'autres mécanismes équivalents (mais différents) pour gérer les numéros générés automatiquement.