JeuWeb - Crée ton jeu par navigateur
MYSQL: DELETE et autoincrementation - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : MYSQL: DELETE et autoincrementation (/showthread.php?tid=5358)



MYSQL: DELETE et autoincrementation - php_addict - 04-04-2011

bonsoir

je me trouve face à un petit soucis avec une table ayant un primary index en autoincremente

les rapports d'attaques sont relatifs aux villages (assignés, table relationelle)

en supprimant un village avec DELETE puis en créant un nouveau village, les anciens rapports du village qui n'existe plus sont visibles par le nouveau village

la seule explication que je vois c'est que la derniere entrée de la table villages ayant été suprimée, le autoincremente aurait pu être décrementé

je suis tombé sur ceci: http://bugs.mysql.com/bug.php?id=3047 et donc j'ai compris que ce n'était pas possible, mais c'est pourtant la seule explication que j'ai trouvé...

avez vous déjà eu des problèmes en cas de DELETE sur une table avec un primary index en autoincremente et que l'autoincremente soit mis à jour apres un DELETE ?

désolé si ce n'est pas très clair...




RE: MYSQL: DELETE et autoincrementation - Sephi-Chan - 04-04-2011

L'auto-increment ne redescend pas quand on supprime une ligne. :o
Comment crées-tu les villages ? Tu leur donnes explicitement un ID ?


Sephi-Chan


RE: MYSQL: DELETE et autoincrementation - php_addict - 04-04-2011

(04-04-2011, 08:48 PM)Sephi-Chan a écrit : Comment crées-tu les villages ? Tu leur donnes explicitement un ID ?

non, je ne lui donne pas d'id, et le tout est dans une transaction commit

je fais un truc du genre (y a pas toutes les valeurs pour que cela soit clair...)


$query = "INSERT INTO villages (joueur_id) VALUES ( :joueur_id)";
$result = $connexion_mmorpg->prepare("$query");
$result->execute(array(':joueur_id' => $joueur_id));

$village_id=$connexion_mmorpg->lastInsertId();

$query = "UPDATE map SET contenu=:apparence_village WHERE x=:new_x AND y=:new_y";
$result = $connexion_mmorpg->prepare("$query");
$result->execute(array(':apparence_village' => $apparence_village , ':new_x' => $new_x , ':new_y' => $new_y));

et pour le DELETE:


$query = "DELETE FROM villages WHERE id =:id";
$result = $connexion_mmorpg->prepare("$query");
$result->execute(array(':id' => $id));

et pire que tout je n'arrive pas à reproduire ce bug...d'ailleur je me demande dans quel fichier mysql stock les data des autoincremente...


RE: MYSQL: DELETE et autoincrementation - Sephi-Chan - 04-04-2011

Pour récupérer la prochaine valeur de l'auto-increment, tu peux faire :


SELECT auto_increment FROM information_schema.tables WHERE table_name = 'villages';

Je pense que si tu n'arrives pas à reproduire le bug, c'est peut-être parce que tu as donné manuellement une valeur à un ID lors d'un test/debug. Non ?


Sephi-Chan


RE: MYSQL: DELETE et autoincrementation - php_addict - 04-04-2011

il est vrai que j'ai fais pas mal de test/debug aujourdh'ui, mais pourtant je suis certain de ne pas avoir donner manuellement un id primary index...cela restera un mystère...

juste pour être certain: rien ne peut modifier la valeur de l'autoincremente hormis un INSERT (sans préciser l'id de la clef primaire) non ?


RE: MYSQL: DELETE et autoincrementation - Ter Rowan - 05-04-2011

si dans php admin, tu peux changer la valeur actuelle de l auto incrémente

donc doit y avoir moyen par ordre sql aussi


RE: MYSQL: DELETE et autoincrementation - atra27 - 05-04-2011

UPDATE information_schema.TABLES SET AUTO_INCREMENT=X WHERE table_name = 'villages';

non?