Récuperer l'id auto increment supprimé

Fermé
betty - 8 oct. 2009 à 12:53
 betty - 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
A voir également:

8 réponses

Aucune solution pour mon problème???
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
8 oct. 2009 à 19:44
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>
           
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
8 oct. 2009 à 13:01
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)
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
8 oct. 2009 à 13:22
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)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
8 oct. 2009 à 19:49
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>
0
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
0
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.
-1