79 votes

Ce qui se passe quand auto_increment sur colonne de type integer atteint le max_value dans les bases de données?

Je me suis mise en œuvre d'une application de base de données et je vais utiliser les deux JavaDB et MySQL comme base de données. J'ai une colonne ID dans mes tables entier comme type et j'utilise les bases de données de type auto_increment-fonction de la valeur.

Mais ce qui arrive quand je reçois plus de 2 (ou 4) milliards de messages et l'entier n'est pas assez? Est le nombre entier a débordé et continue ou c'est une exception que je peux gérer?

Oui, je pourrais changer pour longtemps que type de données, mais comment puis-je vérifier quand c'est nécessaire? Et je pense qu'il y a problème à l'obtention de la last_inserted_id()-fonctions si j'utilise longtemps que type de données pour l'ID de la colonne.

56voto

outis Points 39377

Jim Martin du commentaire du §3.6.9. "À l'aide de AUTO_INCREMENT" de la documentation de MySQL:

Juste au cas où il n'y a aucun doute, le champ de type AUTO_INCREMENT /NE PAS ENVELOPPER/. Une fois que vous atteignez la limite pour la taille du champ, INSERTs de générer une erreur. (Comme par Jeremy Cole)

Un test rapide avec MySQL 5.1.45 résulte en une erreur d':

ERREUR de 1467 (HY000): impossible de lire la valeur d'incrémentation automatique de moteur de stockage

Vous pouvez le tester pour cette erreur lors de l'insertion et de prendre les mesures appropriées.

55voto

Justin Points 151

Juste pour calmer les nerfs, considérez ceci:

Supposons que vous avez une base de données qui insère une nouvelle valeur à chaque fois qu'un utilisateur exécute une sorte de transaction sur votre site web.

Avec un entier de 64 bits comme un IDENTIFIANT puis c'est la condition de dépassement de capacité: Avec une population mondiale de 6 milliards de dollars alors si chaque personne sur terre exécute une transaction une fois par seconde de chaque jour et de chaque année (sans repos) il faudrait plus de 80 ans de votre pièce d'identité à enrouler autour.

C'est à dire, seulement google doit vaguement considérer ce problème de temps en temps pendant une pause-café.

12voto

Matti Virkkunen Points 31633

Vous saurez quand ça va déborder en regardant le plus grand ID. Vous devriez le changer bien avant toute exception vient même près d'être jetés.

En fait, vous devriez design avec un assez grand type de données pour commencer. Votre base de données de performance ne va pas souffrir, même si vous utilisez la version 64 bits d'ID depuis le début.

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