2013-04-01 3 views
2

J'essaie de réinitialiser la valeur d'incrémentation automatique dans l'une de mes tables en fonction du nombre de lignes qui y figurent actuellement. Voici le code que j'ai jusqu'ici.MySQL: Redémarrage de AUTO_INCREMENT

SET @numrows = 0; 

SELECT COUNT(*) total, @numrows := COUNT(*) + 1 numrows FROM maj_user ; 
ALTER TABLE `maj_user` AUTO_INCREMENT = @numrows ; 

Cela fonctionne très bien si je l'exécute dans MySQL Workbench. Cependant, je dois l'enregistrer en tant que fichier SQL et l'exécuter dans le cadre d'un script d'importation de base de données. Si je fais ceci, je reçois ceci:

ERROR 1064 (42000) at line 39: You have an error in your SQL syntax; check the 
manual that corresponds to your MySQL server version for the right syntax to 
use near '@numrows' at line 1 

La ligne 39 est l'instruction ALTER TABLE. Des idées?

+0

ne devrait pas vous installerez la valeur '' de AUTO_INCREMENT' à IFNULL (MAX (id), 0) + 1' ou quelle que soit votre colonne auto-incrémentée? Par hasard, il pourrait être le même que le nombre de lignes, mais ce n'est en aucun cas fiable. – tadman

+0

Dans des circonstances typiques, oui. Dans ce cas particulier, la probabilité que les valeurs MAX et COUNT soient égales est une certitude. – Tanoro

+0

Donc, vous jamais, * jamais * supprimer des lignes? Comment votre 'AUTO_INCREMENT' se retrouve-t-il dans le mauvais état, alors? – tadman

Répondre

0

Pouvez-vous modifier votre syntaxe pour ignorer la configuration de @numrows? Je ne sais pas quel est le problème, mais une solution semble être quelque chose comme:

ALTER TABLE `maj_user` AUTO_INCREMENT = (SELECT COUNT(*) + 1 from maj_user); 
+0

Code d'erreur: 1064. Vous avez une erreur dans votre syntaxe SQL; consultez le manuel correspondant à votre version du serveur MySQL pour la syntaxe à utiliser près de '(SELECT COUNT (*) + 1 de maj_user)' à la ligne 1 – Tanoro

+0

Vous devez utiliser la clé primaire au lieu de * sur les instructions count pour des raisons de performances. – hd1

+0

Même erreur que ci-dessus, hd1. – Tanoro

Questions connexes