Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Bruit][Mysl] L'identifiant automatique

10 réponses
Avatar
Roumégou Eric
Bonjour,

du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id, donc
un Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé
externe(ref du client). En l'absence de cette dernière, je dois lui en
générer une par un algo quelconque (car cette clé est aussi obligatoire
ds mon systeme) , voire reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir
récupéré ma clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre insert que
l'on veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un
truc simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précédente
insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela
soit possible.

Merci de vos réponses

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)

10 réponses

Avatar
Adrien A.
On 24 jan, 08:26, Roumégou Eric wrote:
Bonjour,

du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id , donc
un Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé
externe(ref du client). En l'absence de cette dernière, je dois lui en
générer une par un algo quelconque (car cette clé est aussi obligat oire
ds mon systeme) , voire reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir
récupéré ma clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre insert qu e
l'on veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un
truc simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précédente
insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela
soit possible.

Merci de vos réponses

--
Eric Roumégou
Webmaster des wtabletteshttp://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)



Salut,

Tu peux prendre le problème à l'envers en considérant le dernier id d e
la table et en l'incrémentant:
insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',(select max(id)+1 from address))

Adrien
Avatar
Roumégou Eric
Adrien A. a présenté l'énoncé suivant :
On 24 jan, 08:26, Roumégou Eric wrote:
Bonjour,

du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id, donc
un Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé
externe(ref du client). En l'absence de cette dernière, je dois lui en
générer une par un algo quelconque (car cette clé est aussi obligatoire
ds mon systeme) , voire reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir
récupéré ma clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre insert que
l'on veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un
truc simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précédente
insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela
soit possible.

Merci de vos réponses

--
Eric Roumégou
Webmaster des wtabletteshttp://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)



Salut,

Tu peux prendre le problème à l'envers en considérant le dernier id de
la table et en l'incrémentant:
insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',(select max(id)+1 from address))

Adrien



merci de ta réponse mais on n'est pas ds de l'id auto et aucune
garantie que cela ne rentre pas en colision avec un insert fait en même
tps.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
PYT
Bonjour

La solution serait d'avoir un systeme qui genere des cles pour tes
tables et ne pas se servir des autoincrement de tes tables.

Ainsi tu fais une demande d'id à ton systeme.

Et tu t'en sers lors de l'insert dans ta table

Le systeme peut etre une simple table mysql constituée uniquement d'un
autoincrement.

PYT
Bonjour,

du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id, donc
un Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé externe(ref
du client). En l'absence de cette dernière, je dois lui en générer une
par un algo quelconque (car cette clé est aussi obligatoire ds mon
systeme) , voire reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir
récupéré ma clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre insert que
l'on veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un
truc simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précédente insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela soit
possible.

Merci de vos réponses

Avatar
JeAn-PhI
Roumégou Eric a exposé le 24/01/2012 :
Bonjour,

du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id, donc un
Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé externe(ref du
client). En l'absence de cette dernière, je dois lui en générer une par un
algo quelconque (car cette clé est aussi obligatoire ds mon systeme) , voire
reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir récupéré ma
clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre insert que l'on
veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un truc
simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précédente insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela soit
possible.

Merci de vos réponses



bonjour,

utilise un trigger after insert ?

--
Cordialement JeAn-PhI
Avatar
Roumégou Eric
JeAn-PhI a présenté l'énoncé suivant :

bonjour,

utilise un trigger after insert ?



mysql 4.22
pas de trigger je crois
et c'est un traitement que je ne veux pas de façon systématique.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
b.engelmajer
Bonjour Eric.

Si ton refClientRecu est à NULL au moment de l'insert, tu peux
utiliser un COALESCE.
Tu fais un insert avec comme value du id_refClient :

INSERT
INTO table (id_refClient ) VALUE( COALESCE(refClientRecu,99999) );

Si refClientRecu=NULL => id_refClient ™999
Tu peux, soit utiliser une fonction mySQL pour calculer ton algo, soit
mettre systématiquement une valeur calculée par ton algo, voire même
un (SELECT ... généré dans ta requête). La valeur calculée ne ser a
utilisée que si refClientRecu est à NULL
Avatar
tt
Le Fri, 27 Jan 2012 19:16:59 +0100, PYT a
écrit:

Bonjour

La solution serait d'avoir un systeme qui genere des cles pour tes
tables et ne pas se servir des autoincrement de tes tables.

Ainsi tu fais une demande d'id à ton systeme.

Et tu t'en sers lors de l'insert dans ta table

Le systeme peut etre une simple table mysql constituée uniquement d' un
autoincrement.

PYT
Bonjour,

du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id, donc
un Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé exte rne(ref
du client). En l'absence de cette dernière, je dois lui en géné rer une
par un algo quelconque (car cette clé est aussi obligatoire ds mon
systeme) , voire reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir
récupéré ma clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre inser t que
l'on veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un
truc simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précéden te
insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela s oit
possible.

Merci de vos réponses







Il n'y a pas de sequences (comme dans Oracle) dans MySql ?
--
TT
Avatar
Daniel
Bonjour,

Le 29/01/2012 14:27, tt a écrit :
Le Fri, 27 Jan 2012 19:16:59 +0100, PYT a
écrit:


du bruit mais pour ceux qui comme moi ont choisi mySQL comme sgbd de
prédilection ...

J'utilise pour la plupart de mes tables un identifiant technique en
autoincrement.
Après une création (insert) on a souvent besoin de récupérer l'id, donc
un Select last_insert_id() nous permet de récupérer ceci sans pb.

Normalement j'ai ma clé technique (auto increment) et la clé externe(ref
du client). En l'absence de cette dernière, je dois lui en générer une
par un algo quelconque (car cette clé est aussi obligatoire ds mon
systeme) , voire reproduire ma clé primaire dans cette zone.

D'où la necessite de refaire un update après mon insert et avoir
récupéré ma clé primaire (select last-insert_id())

N'y aurait-il pas un moyen magique de spécifier dès l'ordre insert que
l'on veut dupliquer l'id primaire ?

en écrivant ce message, je me suis dit que je n'avais jamais testé un
truc simple

insert into adress (adr_nom,adr_prenom,ppl_id)
values('DUBOIS','RENE',last_insert_id())

Hélas, le last_insert_id() correspond (logique) à ma précédente
insertion.

Donc un truc ??

je viens de repotasser le site mysql, mais je doute un peu que cela soit
possible.

Merci de vos réponses







Il n'y a pas de sequences (comme dans Oracle) dans MySql ?



Non le système d'auto-increment sur MySQL est différent d'Oracle.

Le système d’auto-incrémentent est connexion dépendant, c'est-à-dire que
le last_insert_id retourné est associé à la connexion qui a fait
l'insert, par conséquent aucune fonction ne peut le remplacer (Max..)

Les solutions possibles sont ;
- insert, lastinsertid, update;
- trigger ;
- faire un PK composé de la colonne autoc-increment+ la colonne spécifique.

Si c'est possible j'opterais pour le PK constitué de 2 colonnes.




--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
JeAn-PhI
Roumégou Eric a émis l'idée suivante :
JeAn-PhI a présenté l'énoncé suivant :

bonjour,

utilise un trigger after insert ?



mysql 4.22
pas de trigger je crois
et c'est un traitement que je ne veux pas de façon systématique.



alors une transaction ?

--
Cordialement JeAn-PhI
Avatar
Daniel
Le 30/01/2012 09:42, JeAn-PhI a écrit :
Roumégou Eric a émis l'idée suivante :
JeAn-PhI a présenté l'énoncé suivant :

bonjour,

utilise un trigger after insert ?



mysql 4.22
pas de trigger je crois
et c'est un traitement que je ne veux pas de façon systématique.



alors une transaction ?




4.22 MyIsam pas de transaction.
De plus une transaction ne changera rien au fait de devoir faire un
insert, récupérer l'id, et de faire un update.

@+

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)