2011-08-17 4 views
1

J'ai une table de factures qui stocke un seul enregistrement pour chaque facture, avec la colonne id (int AUTO_INCREMENT) étant la clé primaire, mais aussi le numéro de référence de la facture.MySQL PhpMyAdmin: Alter AUTO_INCREMENT et/ou INSERT_ID

Maintenant, malheureusement, j'ai dû migrer manuellement certaines factures générées sur un ancien système qui ont un identifiant à cinq chiffres, au lieu d'un à quatre chiffres que le système actuel utilise. Cependant, même lorsque je réinitialise le AUTO_INCREMENT via PhpMyAdmin (opérations de table) à l'ID à quatre chiffres suivant, il insère toujours un chiffre à cinq chiffres étant l'ID supérieur actuellement dans le tableau plus un.

De la recherche autour, il semblerait que je dois réellement changer le insert_id aussi bien que le AUTO_INCREMENT? J'ai essayé d'exécuter ALTER TABLE invoices SET insert_id=8125 ainsi que ALTER TABLE invoices insert_id=8125 mais aucune de ces commandes ne semble être valide.

Quelqu'un peut-il expliquer la bonne façon que je peux réinitialiser le AUTO_INCREMENT afin qu'il insérer des enregistrements avec son 8125 partir id, puis quand il arrive à 10962 il sautera au cours des quatre disques que j'ai ajouté manuellement et continuer id séquentiels de à partir de 10966. Si cela ne passe pas par-dessus 10962 - 10966 alors cela n'a pas vraiment d'importance, car l'entreprise ne génère pas autant de factures chaque année, donc cela se produira dans une année suivante, ce qui ne causera pas de problème, je l'espère.

J'apprécierais vraiment toute aide avec cette situation collante dans laquelle je me suis retrouvé! Merci beaucoup

Répondre

1

La première chose que je vais suggérer est d'abandonner PHPMyAdmin parce que c'est l'une des pires "applications" jamais utilisées pour travailler avec MySQL. Obtenez une interface graphique appropriée. Mon préféré est SQLYog.

Maintenant sur le problème. Ne jamais, jamais altérer la clé primaire, n'essayez pas de la "réinitialiser" comme vous l'avez dit ou de mettre à jour des colonnes qui ont un entier généré par la base de données. Quant à savoir pourquoi, le sujet est large et peut être discuté dans une autre question, juste jamais, jamais toucher la clé primaire une fois que vous l'avez mis en place.

La deuxième chose est que quelqu'un supprimait des enregistrements de factures, donc l'auto-incrément est maintenant à 10k + plutôt qu'à 8k +. Ce n'est pas une mauvaise chose, mais si vous avez besoin de valeurs séquentielles pour vos factures (comme il ne peut pas y avoir d'écart entre les factures 1 et 5), utilisez un champ supplémentaire appelé sequence_id ou invoice_ref et utilisez des déclencheurs pour calculer ce nombre. Ne comptez pas sur la fonctionnalité auto_increment pour réutiliser les nombres qui ont été perdus après l'opération DELETE.

Vous pouvez aussi exporter la base de données que vous avez utilisée, trouver la définition CREATE TABLE pour la table des factures et trouver la ligne où il est indiqué "AUTO_INCREMENT = [un certain nombre]" et supprimer cette instruction. Importez dans votre nouvelle base de données et l'auto_increment continuera à partir de la dernière facture. Vous pouvez faire la même chose en utilisant ALTER TABLE, mais il est plus sûr de réimporter.

+0

Nous vous remercions de vos précieux commentaires. S'il y a un moyen de faire le travail correctement, sans recoder mon système et ajouter un champ invoiceRef supplémentaire, ce serait préférable. Le dernier processus que vous avez décrit n'aiderait malheureusement pas puisque la dernière facture (10k +) n'est pas l'identifiant dont je souhaite que la numérotation continue (8k +) l'est. De plus, changer le 'AUTO_INCREMENT' n'a aucun effet car il semble que MySQL l'ignore et élabore le prochain' insert_id' basé sur le dernier identifiant de facture (ce qui n'est pas ce dont j'ai besoin dans ce cas!) –

+0

C'est pourquoi auto_increment est généralement mauvais choix pour les numéros de référence de facture si les numéros doivent être réutilisés. C'est une clé primaire de substitution, cela a du sens pour la base de données mais pas pour l'entreprise.Si le seul problème est que le client n'aime pas voir les écarts entre les factures, alors c'est une nuisance plus qu'un problème. Essayer de le réparer pourrait créer de vrais problèmes! Je suggère de ne rien faire et d'essayer d'expliquer les raisons à votre client. Si cela ne marche pas, créer un autre champ et renuméroter les factures devrait faire l'affaire. –

+0

Ok, j'ai réussi à parler à mon client et il est heureux de continuer avec les numéros de facture 10k + heureusement. Dans le futur, je n'utiliserai que «id int AUTO_INCREMENT» pour la gestion de la base de données et les clés étrangères, et non un champ qui est affiché à l'utilisateur! Merci de votre aide. –