CommentCaMarche
Recherche
Posez votre question Signaler

Récuperer l'id auto increment supprimé

betty - Dernière réponse le 8 oct. 2009 à 20:01
Bonjour,
J'ai un problème, au niveau de ma table MySql j'ai un champs auto incrément qui s'incrémente a chaque nouvelle insertion, et à chaque suppression d'un champs son numéro devient inutilisable et qu'on peut pas lui affecter à un nouvel enregistrement, ben c'est ca ce que je veux gérer, je veux qu'on je supprime un enregistrement je récupère son id et je peux insérer un enregistrement portant le même id.
Je sais pas s'il y a une requete SQL ou commande PHP qu'on peut utiliser pour détecter l'id qui manque (qu'on a supprimé son enregistrement) dans le but de le réutiliser et l'affecter au nouveau enregistrement entrée
Merci bien d'avance pour vos suggestions et aides
Lire la suite 
Réponse
+1
moins plus
D'accord, vraiment merci pour la précision, le fait d'avoir des numéros d'Id qui ne se suivent pas ne me gène plus, mais ca gène les utilisateurs de site que je réalise en php et j'utilise une base de données Mysql.
ce qui m'a rendu faisable le truc, c'est que je peux le faire manuellement au niveau de l'ongle Opérations => AUTO_INCREMENT là où je précise l'id du prochain enregistrement que je saisie a partir de site que je réalise.
Et c'est pour ca je cherche une commande qui peut gérer cela automatiquement, on lui donnant une variable.
Ajouter un commentaire
Réponse
+1
moins plus
Ajouter un commentaire
Réponse
+1
moins plus
Salut,

on peut réinitialiser l'incrémentation du fait qu'elle recommence de cet id, au lieu de lui ajouter +1 ??

Oui, c'est possible.
Il n'y a rien à récupérer, comme c'est un champ automatique il s'incrémente tout seul.
Mais après chaque suppression tu dois faire ALTER TABLE donnee AUTO_INCREMENT=0 pour réinitialiser.

Voici une petite démonstration.

mysql> create database personne;
Query OK, 1 row affected (0.00 sec)

mysql> use personne;
Database changed
mysql> create table donnee(id INT NOT NULL auto_increment PRIMARY KEY,nom varchar(50),prenom varchar(50));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into donnee values('','AZERTY','toto');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into donnee values('','QWERTY','titi');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> insert into donnee values('','BLABLA','tata');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from donnee;
+----+--------+--------+
| id | nom    | prenom |
+----+--------+--------+
|  1 | AZERTY | toto   |
|  2 | QWERTY | titi   |
|  3 | BLABLA | tata   |
+----+--------+--------+
3 rows in set (0.00 sec)

mysql> delete from donnee where prenom='tata';
Query OK, 1 row affected (0.00 sec)

mysql> delete from donnee where prenom='titi';
Query OK, 1 row affected (0.00 sec)

mysql> select * from donnee;
+----+--------+--------+
| id | nom    | prenom |
+----+--------+--------+
|  1 | AZERTY | toto   |
+----+--------+--------+
1 row in set (0.00 sec)

mysql> ALTER TABLE donnee AUTO_INCREMENT=0;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into donnee values('','QWERTY','titi');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from donnee;
+----+--------+--------+
| id | nom    | prenom |
+----+--------+--------+
|  1 | AZERTY | toto   |
|  2 | QWERTY | titi   |
+----+--------+--------+
2 rows in set (0.00 sec)

mysql>
           
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Ce que tu veux faire est impossible avec un champ auto incrémenté.

De plus l'Id est un identifiant unique d'une table qui peut être relier à d'autres tables. Vouloir réutiliser un Id supprimé risque d'entrainer des problèmes.

;o)
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour ta réponse; Oui vous avez raison j'ai cet id utilisé dans une autre table mais lors de la suppression de l'enregistrement je le supprime même de l'autre table et sa valeur deviendra = 0, alors on peut pas trouver une solution?
Et si l'enregistrement supprimé était le dernier, on peut réinitialiser l'incrémentation du fait qu'elle recommence de cet id, au lieu de lui ajouter +1 ??
Et si on vient de supprimer un enregistrement (qui n'est pas le dernier) on peut pas récupérer sur le champs son id et le réutiliser dans le nouveau enregistrement inséré??

Désolée pour mes question nombreuses, mais vraiment j'ai besoin de l'aide
Merci encore une fois
Ajouter un commentaire
Réponse
+0
moins plus
La réponse est non. Un champ auto incrémenté n'est pas modifiable. Tu peux effectivement récupérer l'Id mais tu ne pourras pas faire un insert en utilisant cet Id ...

Je ne vois pas en quoi c'est génant d'avoir des numéros d'Id qui ne se suivent pas. Mais bon tu dois certainement le savoir ^^

;o)
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Voilà ce qui se passe si je n'utilise pas ALTER TABLE donnee AUTO_INCREMENT=0
Le id après deux suppression sera 4 et pas 2. (voir en gras plus bas)

mysql> create database personne;
Query OK, 1 row affected (0.00 sec)

mysql> use personne;
Database changed
mysql> create table donnee(id INT NOT NULL auto_increment PRIMARY KEY,nom varchar(50),prenom varchar(50));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into donnee values('','AZERTY','toto');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> insert into donnee values('','QWERTY','titi');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into donnee values('','BLABLA','tata');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from donnee;
+----+--------+--------+
| id | nom    | prenom |
+----+--------+--------+
|  1 | AZERTY | toto   |
|  2 | QWERTY | titi   |
|  3 | BLABLA | tata   |
+----+--------+--------+
3 rows in set (0.00 sec)

mysql> delete from donnee where prenom='tata';
Query OK, 1 row affected (0.00 sec)

mysql> delete from donnee where prenom='titi';
Query OK, 1 row affected (0.00 sec)

mysql> select * from donnee;
+----+--------+--------+
| id | nom    | prenom |
+----+--------+--------+
|  1 | AZERTY | toto   |
+----+--------+--------+
1 row in set (0.00 sec)

mysql> insert into donnee values('','QWERTY','titi');
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from donnee;
+----+--------+--------+
| id | nom    | prenom |
+----+--------+--------+
|  1 | AZERTY | toto   |
|  4 | QWERTY | titi   |
+----+--------+--------+
2 rows in set (0.00 sec)

mysql>
Ajouter un commentaire
Réponse
+0
moins plus
Vraiment Merci lami20j, c'est très utile comme commande pour MySQL, je vais testé tout de suite pour mon cas merci encore une fois
Ajouter un commentaire
Ce document intitulé «  récuperer l'id auto increment supprimé  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.