OVH Cloud OVH Cloud

[MYSQL] inquiétude

10 réponses
Avatar
jacques.trepp
bonjour,

Soit une table CMD_USI avec un identifiant autoincrément. Un site A
crée des
commandes, les envoie au site B, qui les intègre, fabrique et livre le
site
A . Le site A facture le client, et efface la commande.
Le site B est sous linux en 4.1.7
le site A est sous XP en 4.1.7
[INQUIETUDE]
Si le service MySql est arrêté et redémarré, ou que la machine XP est
redémarrée, l'auto-incrément est ré-initialisé !
je teste sur ma table de démo, qui contient 21 records. Je facture
toutes
ces commandes. La table est vide.
J'ajoute une commande, l'identifiant passe à 22 (normal).
Je facture, donc je vide la table.
J'arrête le service mysql, je le redémarre, j'ajoute une commande :
l'identifiant est à 1.
[\INQUIETUDE]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto
incrément
lorsqu'une table est vide ?

--
Jacques Trepp
Albygest

10 réponses

Avatar
Daniel
Bonjour Jacques,
jacques.trepp writes:

bonjour,

Soit une table CMD_USI avec un identifiant autoincrément. Un site A
crée des
commandes, les envoie au site B, qui les intègre, fabrique et livre le
site
A . Le site A facture le client, et efface la commande.
Le site B est sous linux en 4.1.7
le site A est sous XP en 4.1.7
[INQUIETUDE]
Si le service MySql est arrêté et redémarré, ou que la machine XP est
redémarrée, l'auto-incrément est ré-initialisé !
je teste sur ma table de démo, qui contient 21 records. Je facture
toutes
ces commandes. La table est vide.
J'ajoute une commande, l'identifiant passe à 22 (normal).
Je facture, donc je vide la table.
J'arrête le service mysql, je le redémarre, j'ajoute une commande :
l'identifiant est à 1.
[INQUIETUDE]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto
incrément
lorsqu'une table est vide ?



Normalement non, mais fait attention, celon la méthode que tu utilises
pour vider ta table effectivement tu reparts de 0. Fait une recherche
dans la doc celà est indiquée. Le problème sur lea anciennes versions
de mysql <4.1 tu ne pouvais pas dire je recommence à 22. Il me semble
que maintenant tu peux l'indiquer (pas sure, je confonds peut être
avec une autre base...)


--
Jacques Trepp
Albygest




--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
Romain PETIT
jacques.trepp avait prétendu :
bonjour,


[...]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto incrément
lorsqu'une table est vide ?



Oui, c'est normal
http://dev.mysql.com/doc/mysql/fr/innodb-auto-increment-column.html
"Le compteur est stocké uniquement en mémoire, et non pas sur le
disque."

http://dev.mysql.com/doc/mysql/fr/example-auto-increment.html
Pas pour les tables MyISAM

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Daniel
Daniel write

Bon, effectivement j'ai dit pas mal de connerie ;-(.
Je dois avoir un petir problème de transaction en ce momemnt ;-)

La réponse de Romain est correcte, parcontre je me demande avec quelle
base je confonds???


--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
jacques.trepp
Romain PETIT a émis l'idée suivante :
jacques.trepp avait prétendu :
bonjour,


[...]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto incrément
lorsqu'une table est vide ?



Oui, c'est normal
http://dev.mysql.com/doc/mysql/fr/innodb-auto-increment-column.html
"Le compteur est stocké uniquement en mémoire, et non pas sur le disque."

http://dev.mysql.com/doc/mysql/fr/example-auto-increment.html
Pas pour les tables MyISAM



snif :'(

ça, c'est pas cool du tout. Moi qui pensait que innodb était la
panacée, je suis très surpris de ce comportement.
c'est vrai que chez nous, le serveur n'est jamais arrêté (quoique, si
maintenance, si), donc je n'y ai pas pris garde.
Bon, pour le coup des commandes, ce n'est pas grave. Simplement, il
faut que je vide les commandes sur le serveur après traitement, pour
pouvoir accepter les nouvelles commandes qui arriveront avec le même
id_auto.
je n'en reviens toujours pas. Même HF ne fait pas ça :-?

merci pour tes précisions.

Du coup, ça ne justifie plus le sur-coût du moteur innoDB, par rapport
aux tables Isam.
Le jour où les tables Isam supporteront les transactions, ça coutera
moins cher.

--
Jacques Trepp
Albygest
Avatar
Roumegou Eric
Après mure réflexion, jacques.trepp a écrit :
Romain PETIT a émis l'idée suivante :
jacques.trepp avait prétendu :
bonjour,


[...]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto incrément
lorsqu'une table est vide ?



Oui, c'est normal
http://dev.mysql.com/doc/mysql/fr/innodb-auto-increment-column.html
"Le compteur est stocké uniquement en mémoire, et non pas sur le disque."

http://dev.mysql.com/doc/mysql/fr/example-auto-increment.html
Pas pour les tables MyISAM



snif :'(

ça, c'est pas cool du tout. Moi qui pensait que innodb était la panacée, je
suis très surpris de ce comportement.
c'est vrai que chez nous, le serveur n'est jamais arrêté (quoique, si
maintenance, si), donc je n'y ai pas pris garde.
Bon, pour le coup des commandes, ce n'est pas grave. Simplement, il faut que
je vide les commandes sur le serveur après traitement, pour pouvoir accepter
les nouvelles commandes qui arriveront avec le même id_auto.
je n'en reviens toujours pas. Même HF ne fait pas ça :-?



Ne crois tu pas qu'un compteur "géré à l'os" serait préférable dans ton
cas ?


merci pour tes précisions.

Du coup, ça ne justifie plus le sur-coût du moteur innoDB, par rapport aux
tables Isam.
Le jour où les tables Isam supporteront les transactions, ça coutera moins
cher.



Une des raisons aussi pour laquelle j'utilise moins Innodb au profit de
myISAM est que Innodb ne supporte pas les index full text (ô combien
pratique !)

--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Daniel
jacques.trepp writes:

Romain PETIT a émis l'idée suivante :
> jacques.trepp avait prétendu :
>> bonjour,
> [...]
>
>> les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto inc rément
>> lorsqu'une table est vide ?
>
> Oui, c'est normal
> http://dev.mysql.com/doc/mysql/fr/innodb-auto-increment-column.html
> "Le compteur est stocké uniquement en mémoire, et non pas sur le di sque."
>
> http://dev.mysql.com/doc/mysql/fr/example-auto-increment.html
> Pas pour les tables MyISAM

snif :'(

ça, c'est pas cool du tout. Moi qui pensait que innodb était la
panacée, je suis très surpris de ce comportement.
c'est vrai que chez nous, le serveur n'est jamais arrêté (quoique, si
maintenance, si), donc je n'y ai pas pris garde.
Bon, pour le coup des commandes, ce n'est pas grave. Simplement, il
faut que je vide les commandes sur le serveur après traitement, pour
pouvoir accepter les nouvelles commandes qui arriveront avec le même
id_auto.
je n'en reviens toujours pas. Même HF ne fait pas ça :-?

merci pour tes précisions.

Du coup, ça ne justifie plus le sur-coût du moteur innoDB, par rapport
aux tables Isam.
Le jour où les tables Isam supporteront les transactions, ça coutera
moins cher.



Pour MyIsam je pense que tu peux oublier, pour les transactions c'est
innodb. Je crois qu'il y a un autre projet en transactionnel qui est BDB
(ou un truc du genre..)
Maintenant, il est clair que innodb évolue, et ce que tu dis
aujourd'hui ne sera peut être plus vrai demain.

Parcontre, concernant innodb, pour l'auto_increment, il ne le perd pas
uniquement parceque tu éteins le serveur, mais parceque le moteur
réserve une valeur +1 à la dernière valeur dans la table donc dans ton
cas si tu effaces tout, la valeur +1 est 1.

Je comprends maintenant pourquoi des personnes critiquent + ou - MySQL
en comparaison à Oracle et postgresql, maintenant un des avantages de tou tes
ces bases c'est que c'est documenté ;-), que c'est ouvert, et stable...

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
Philippe Lienart
jacques.trepp a couché sur son écran :
bonjour,

Soit une table CMD_USI avec un identifiant autoincrément. Un site A crée des
commandes, les envoie au site B, qui les intègre, fabrique et livre le site
A . Le site A facture le client, et efface la commande.
Le site B est sous linux en 4.1.7
le site A est sous XP en 4.1.7
[INQUIETUDE]
Si le service MySql est arrêté et redémarré, ou que la machine XP est
redémarrée, l'auto-incrément est ré-initialisé !
je teste sur ma table de démo, qui contient 21 records. Je facture toutes
ces commandes. La table est vide.
J'ajoute une commande, l'identifiant passe à 22 (normal).
Je facture, donc je vide la table.
J'arrête le service mysql, je le redémarre, j'ajoute une commande :
l'identifiant est à 1.
[INQUIETUDE]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto incrément
lorsqu'une table est vide ?



J'ai effectué un test sur une base de données MySQL sous Windows
(version 4.1) et je n'ai pas eu ce problème si j'efface les
enregistrements par delete.
Mais évidemment si j'utilise la fonction truncate table tout est
réinitialisé et le compteur repart à zéro.

--
A+

PhL
Avatar
jacques.trepp
Après mure réflexion, Philippe Lienart a écrit :
jacques.trepp a couché sur son écran :
bonjour,

Soit une table CMD_USI avec un identifiant autoincrément. Un site A crée
des
commandes, les envoie au site B, qui les intègre, fabrique et livre le site
A . Le site A facture le client, et efface la commande.
Le site B est sous linux en 4.1.7
le site A est sous XP en 4.1.7
[INQUIETUDE]
Si le service MySql est arrêté et redémarré, ou que la machine XP est
redémarrée, l'auto-incrément est ré-initialisé !
je teste sur ma table de démo, qui contient 21 records. Je facture toutes
ces commandes. La table est vide.
J'ajoute une commande, l'identifiant passe à 22 (normal).
Je facture, donc je vide la table.
J'arrête le service mysql, je le redémarre, j'ajoute une commande :
l'identifiant est à 1.
[INQUIETUDE]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto incrément
lorsqu'une table est vide ?



J'ai effectué un test sur une base de données MySQL sous Windows (version
4.1) et je n'ai pas eu ce problème si j'efface les enregistrements par
delete.
Mais évidemment si j'utilise la fonction truncate table tout est réinitialisé
et le compteur repart à zéro.



Bonjour,
attention: ça ne réinitialise que si tous les enregistrements de la
table on été supprimés par delete.
bien sur, je n'utilise pas truncate ni optimize table.

--
Jacques Trepp
Albygest
Avatar
Roumegou Eric
jacques.trepp avait énoncé :
Après mure réflexion, Philippe Lienart a écrit :
jacques.trepp a couché sur son écran :
bonjour,

Soit une table CMD_USI avec un identifiant autoincrément. Un site A crée
des
commandes, les envoie au site B, qui les intègre, fabrique et livre le
site
A . Le site A facture le client, et efface la commande.
Le site B est sous linux en 4.1.7
le site A est sous XP en 4.1.7
[INQUIETUDE]
Si le service MySql est arrêté et redémarré, ou que la machine XP est
redémarrée, l'auto-incrément est ré-initialisé !
je teste sur ma table de démo, qui contient 21 records. Je facture toutes
ces commandes. La table est vide.
J'ajoute une commande, l'identifiant passe à 22 (normal).
Je facture, donc je vide la table.
J'arrête le service mysql, je le redémarre, j'ajoute une commande :
l'identifiant est à 1.
[INQUIETUDE]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto incrément
lorsqu'une table est vide ?



J'ai effectué un test sur une base de données MySQL sous Windows (version
4.1) et je n'ai pas eu ce problème si j'efface les enregistrements par
delete.
Mais évidemment si j'utilise la fonction truncate table tout est
réinitialisé et le compteur repart à zéro.



Bonjour,
attention: ça ne réinitialise que si tous les enregistrements de la table on
été supprimés par delete.
bien sur, je n'utilise pas truncate ni optimize table.



moi j'avais testé avec truncate, et cela ne mettait pas le compteur à 0
(comme les delete).
Par contre après arret de mysql, cela remettait à 0.

--
Eric Roumégou
http://cerbermail.com/?TSoulBerPA
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
jacques.trepp
Roumegou Eric avait écrit le 10/02/2005 :
jacques.trepp avait énoncé :
Après mure réflexion, Philippe Lienart a écrit :
jacques.trepp a couché sur son écran :
bonjour,

Soit une table CMD_USI avec un identifiant autoincrément. Un site A crée
des
commandes, les envoie au site B, qui les intègre, fabrique et livre le
site
A . Le site A facture le client, et efface la commande.
Le site B est sous linux en 4.1.7
le site A est sous XP en 4.1.7
[INQUIETUDE]
Si le service MySql est arrêté et redémarré, ou que la machine XP est
redémarrée, l'auto-incrément est ré-initialisé !
je teste sur ma table de démo, qui contient 21 records. Je facture toutes
ces commandes. La table est vide.
J'ajoute une commande, l'identifiant passe à 22 (normal).
Je facture, donc je vide la table.
J'arrête le service mysql, je le redémarre, j'ajoute une commande :
l'identifiant est à 1.
[INQUIETUDE]

les tables sont en InnoDB. Est-ce normal de réinitialiser l'auto
incrément
lorsqu'une table est vide ?



J'ai effectué un test sur une base de données MySQL sous Windows (version
4.1) et je n'ai pas eu ce problème si j'efface les enregistrements par
delete.
Mais évidemment si j'utilise la fonction truncate table tout est
réinitialisé et le compteur repart à zéro.



Bonjour,
attention: ça ne réinitialise que si tous les enregistrements de la table
on été supprimés par delete.
bien sur, je n'utilise pas truncate ni optimize table.



moi j'avais testé avec truncate, et cela ne mettait pas le compteur à 0
(comme les delete).
Par contre après arret de mysql, cela remettait à 0.



Dans mon cas, ça n'a pas une importance capitale. Puisque je peux vider
aussi coté serveur, pour éviter l'erreur de doublon.
C'est le comportement qui m'a scotché, parce que pour moi, id_auto,
c'est id_auto tout le temps, même après un reboot. :-)

--
Jacques Trepp
Albygest