Comment faire pour Réinitialiser un MySQL AutoIncrement à l'aide d'une valeur maximale à partir d'une autre table?
Je sais que cela ne fonctionne pas, essayé dans diverses formes et de l'échec de tous les temps. Quelle est la façon la plus simple pour atteindre le résultat suivant?
ALTER TABLE XYZ AUTO_INCREMENT = (select max(ID) from ABC);
C'est parfait pour les projets d'automatisation. Merci!!!!
SELECT @max := (max(ID)+1) from ABC; -> This works!
select ID from ABC where ID = (@max-1); -> This works!
ALTER TABLE XYZ AUTO_INCREMENT = (@max+1); -> This fails :( Why?
Vous devez vous connecter pour publier un commentaire.
Utiliser un Déclaration Préparée À L'Avance:
PREPARE stmt FROM 'ALTER TABLE XYZ AUTO_INCREMENT = ?'
générer l'erreur pour moi 🙁You have an error in your SQL syntax ... near '?' at line 1
. Vous pouvez le voir dans ce violon. Il semble que la?
n'est pas accepté dans l'instruction prepare avecAUTO_INCREMENT
. Le Anurag réponse a une solution de contournement pour elle.suivantes mysql docs, cela a fonctionné pour moi dans mysql 5.7:
SELECT COALESCE(MAX(id), 0) + 1 FROM ABC
si ABC est une table vide.Je suis de la création d'une base de données automatisée de transformation de script pour une nouvelle version de mon application.
Dans une table, j'avais besoin de changer la primaire auto-incrémentée domaine à un autre domaine. Depuis cette page, est venu la première de nombreuses fois alors que j'ai cherché une solution pour elle, voici une solution qui a finalement fonctionné pour moi:
Qui est d'avoir des problème avec PRÉPARER stmt DE 'ALTER TABLE XYZ AUTO_INCREMENT = ?' pouvez utiliser
Reset Auto Incrément Id.
http://community.spiceworks.com/scripts/show/3042-reset-auto-increment-ids
mise à jour de tous les auto-incrément de colonnes dans une base de données le plus possible la valeur sur la base des valeurs actuelles dans les bases de données. Nous avons besoin de le faire après le nettoyage d'une base de données.
Utiliser une Déclaration Préparée à l'intérieur d'une Procédure Stockée:
Ok les gars. Je suis venu avec une solution intuitive. La meilleure partie est qu'il fonctionne!
Personnellement, je serais probablement utiliser un script shell ou un peu de C#/C++ ou PHP/Ruby/Perl script pour faire cela en 2 requêtes:
SELECT MAX(ID) FROM ABC;
ALTER TABLE XYZ AUTO_INCREMENT = <insert value retrieved from first query here>
Évidemment être attentif à ce que la nouvelle incrément automatique ne causera pas de clé d'affrontements avec les données existantes dans la
XYZ
table.Si vous voulez vraiment faire dans MySQL seul, vous pouvez simplement le jeter à la construit dynamiquement modifier la commande vers un fichier sur le disque, puis l'exécuter.
Comme suit:
Je ne suis qu'un amateur, mais j'ai une astuce 🙂 Si vous remplit l'ensemble de votre table avec de nouvelles données, vous pouvez l'utiliser juste avant de les remplir:
Je veux dire, il réinitialise également auto_increment (et efface tout le contenu; Oui, table de séjour).
Vous pouvez sauvegarde de vos données, l'après tronquer insérer dans ce sans id.