2010-05-12 4 views
1

J'ai deux tables mysql, il faut commencer son id de colonne d'auto-incrémentation avec la dernière valeur de la dernière ligne insérée dans l'autre table (plus 1).Réinitialiser la valeur de la colonne d'incrémentation automatique dans le script mysql

Selon le manuel de MySQL, vous pouvez redémarrer la valeur d'une colonne d'incrémentation automatique comme ceci:

 
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100; 

Cependant, cela est impossible:

 
mysql> ALTER TABLE tb2 AUTO_INCREMENT = (SELECT MAX(id) FROM tbl1); 

J'ai besoin d'exécuter quelque chose comme cela parce que Je remplis les tables en utilisant un script. Y a-t-il un autre moyen de l'atteindre?

+1

La nécessité de manipuler l'index auto_increment est généralement le symptôme d'un défaut de conception. Pourquoi les identifiants des tables doivent-ils être corrélés de cette manière? –

+0

Ne pensez pas que les instructions SELECT fonctionnent dans cette situation. Vous pouvez toujours l'interroger à partir de tbl1 en premier. Par défaut, l'incrément automatique est défini sur la dernière entrée de cette table. Veillez donc à ne pas écraser les valeurs dans tbl2 avec ces tbl1 - elles peuvent déjà exister dans tbl2. Si vous avez besoin qu'ils soient identiques, n'utilisez pas l'incrémentation automatique et mettez simplement à jour l'identifiant dans tbl2 avec celui dans tbl1. – Alec

+0

Les deux tables sont liées à une troisième table qui va générer les identifiants de leurs lignes dans le futur. Comme je dois migrer des données à l'aide d'un script, il est plus facile pour moi de remplir une table, puis la seconde, puis de remplir la table du générateur puis de créer les clés étrangères. – Lucia

Répondre

2

Je pense que vous essayez d'utiliser la colonne d'auto-incrémentation pour quelque chose qui ne convient pas. Si vous vous souciez des valeurs exactes qui sont insérées, elles ne doivent pas être incrémentées automatiquement.

0

IL EST D'UTILISER CE SCRIPT

ALTER TABLE `people` AUTO_INCREMENT =1 

où les gens est ma table, ou vous pouvez le faire grâce à l'interface graphique (onglet fonctionnement de phpmyadmin avec table actuellement sélectionnée)

+1

La réponse de SLim fonctionne, si elle ne peut pas être définie sur 1, elle est définie sur la valeur la plus faible possible, ce qui était le cas de OP. –

0

Qu'en est-il créer un enregistrement fictif et incrément?

-- insert dummy forcing id 
INSERT INTO 'tb2' (ID, NAME, ...) 
VALUES (SELECT MAX(id) FROM tb1, "dummy", ...); 

-- automagically increment to last id + 1 
ALTER TABLE `tb2' AUTO_INCREMENT = 1; -- only myISAM 

-- delete dummy 
DELETE FROM 'tb2' WHERE NAME="dummy"; 
Questions connexes