Avatar billede zorkmontana Nybegynder
29. april 2009 - 10:01 Der er 12 kommentarer og
1 løsning

Insert id i anden tabel

Jeg har to tabeller den ene er en udvidelse af den anden, når jeg så indsætter noget nyt i den ene skal den anden have dens autoincrementet id plus andet.

er der nogen der ved om der er nogen nem måde at indsætte et fornylig oprettet id i den anden tabel på en meget simpel måde?

det skal helst være i kun en query da der ellers kan blive problemer da det er en server der er forbundet til databasen og at den ikke opretter flere sessioner.
Avatar billede acore Ekspert
29. april 2009 - 10:14 #1
Du har en linie i stil med:

INSERT INTO tabel1 SET felt1='xxx', felt2='yyy';

Du kan så tilføje en ny query:

INSERT INTO tabel2 (id) SELECT MAX(id) FROM tabel1

Så får du tilføjet den seneste record.(den med det højeste id)
Avatar billede showsource Seniormester
29. april 2009 - 10:27 #2
Det må være mere korrekt at bruge LAST_INSERT_ID(), hvis ellers det er en query som følger umiddelbart efter den første insert
Avatar billede zorkmontana Nybegynder
29. april 2009 - 10:38 #3
acore -> ved at bruge MAX(id) har jeg saa ikke en risiko for at der bliver brugt et forkert id?
ex hvis to brugere opretter noget paa samme tid.

showsource -> ved du om der er en maade at jeg kan gore det i en query.
fx
insert into event(id,eventName) values ('','I skole');
insert into CalenderToEvent(id, calId, eventId) values ('','1',event.last_insert_id());

er der ikke en maade at gore noget lignende det? og saa bare kore det i en query?
Avatar billede showsource Seniormester
29. april 2009 - 10:47 #4
INSERT INTO event(id,eventName) VALUES (NULL,'I skole');
INSERT INTO CalenderToEvent(id, calId, eventId) VALUES (NULL,'1',LAST_INSERT_ID());
Avatar billede zorkmontana Nybegynder
29. april 2009 - 11:10 #5
takker showsource :D point?
Avatar billede showsource Seniormester
29. april 2009 - 11:14 #6
Ok
Væn dig til at bruge NULL for et autoincrement felt ved INSERT
Og evt. væn dig til at bruge STORE bogstaver for mysql specifik "kode"
Avatar billede zorkmontana Nybegynder
29. april 2009 - 11:29 #7
Takker gor jeg ogsaa normalt men skulle lige gaa lidt hurtigt ;)
Avatar billede acore Ekspert
29. april 2009 - 19:54 #8
@showsource: Enig

@begge: I begge løsninger kan det teoretisk gå i ged, hvis 2 brugere er i gang samtidig, og den anden brugers første insert kommer inden den første brugers anden insert. Vil jeg mene... Men i praksis tror jeg den er helt teoretisk.

Ville du ikke gøre det lettere for dig selv ved at lave det til en tabel?

Bagefter har jeg også tænkt på at en TRIGGER ville være det helt rigtige. Problemet er bare, at det er ikke sikkert, at du har rettigheder til at lave sådan en.
Avatar billede showsource Seniormester
29. april 2009 - 20:07 #9
LAST_INSERT_ID() henter den korrekte værdi, når du kører den efter en INSERT, uanset antal brugere som poster på samme tid.

Så'n har jeg forstået det, anyway :o)
Avatar billede acore Ekspert
29. april 2009 - 22:02 #10
Du kan teoretisk ikke garantere at en anden bruger kommer før - dvs får eksekveret sin INSERT inden dig - og så er du på den. Det er jo ikke last INSERT for din bruger.

Med en TRIGGER eller en lås på databasen kan du garantere det - ellrs ikke, vil jeg mene.

Så'n har jeg forstået det :o)
Avatar billede arne_v Ekspert
30. april 2009 - 02:27 #11
Nej.

LAST_INSERT_ID() er sidste auto increment id på connection. Så uanset hvor mange der indsætter parallelt, så vil LAST_INSERT_ID() altid give den rigtige (forudsat at connection ikke deles).
Avatar billede zorkmontana Nybegynder
30. april 2009 - 10:24 #12
Blev ogsaa enig med mig selv om at den server der kommer til at have kontakt til databasen skulle oprette en traad for hver bruger der logger ind for at holde dem adskilt i forhold til baade database og andre privilegier paa serveren. saa det er hvis den helt rigtige loesning jeg har valgt ;) saa det var rart lige at faa det paa plads

- Anders
Avatar billede acore Ekspert
30. april 2009 - 22:37 #13
En nærlæsning af manualen bekræfter at du har ret.

Man skal aldrig stoppe med at læse for tidligt ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester