Avatar billede danny_k Nybegynder
12. december 2003 - 14:47 Der er 18 kommentarer og
1 løsning

SELECT og INSERT

Jeg skal bruge ID på et emne, som jeg netop har oprettet i databasen. Hvordan sikrer jeg mig at jeg får fat i det rigtige ID, i forhold til at der i samme sekund kan være en anden der har oprettet et andet emne?
Sådan ser min INSERT ud nu:
"INSERT INTO emne VALUES('', 'emne', 'tekst', 'afsender')"

Jeg skal altså bruge det auto-genererede ID.
Avatar billede ztyxx Nybegynder
12. december 2003 - 14:50 #1
de får jo hvert sit id, hvis du laver det autoincreesed
Avatar billede danny_k Nybegynder
12. december 2003 - 14:53 #2
Ja men hvordan får jeg fat i det rigtige ID. Jeg skal bruge ID'et til at oprette en relation i en anden tabel.
Avatar billede ztyxx Nybegynder
12. december 2003 - 14:55 #3
SELECT * FROM emne WHERE emne='emnet'
Avatar billede detox Nybegynder
12. december 2003 - 14:55 #4
Avatar billede ztyxx Nybegynder
12. december 2003 - 14:56 #5
så kan du udskrive det korrekte ID der hører til emnet
Avatar billede erikjacobsen Ekspert
12. december 2003 - 14:57 #6
styxx: det kunne slet ikke ske at to poster indeholdt samme emne??
Avatar billede detox Nybegynder
12. december 2003 - 14:57 #7
Eller:
SELECT LAST_INSERT_ID();
Avatar billede ztyxx Nybegynder
12. december 2003 - 14:57 #8
erik> jo naturligvis
Avatar billede detox Nybegynder
12. december 2003 - 15:01 #9
Eks:
INSERT INTO emne VALUES('', 'emne', 'tekst', 'afsender');
SELECT LAST_INSERT_ID();
Avatar billede danny_k Nybegynder
12. december 2003 - 15:03 #10
Tager jeg fejl hvis de foreslåede løsninger stadig ikke tager højde for, at der, selvom disse statements ligger lige efter hinanden i koden, stadig teoretisk set kan være oprettet et andet emne ind imellem?
Avatar billede danny_k Nybegynder
12. december 2003 - 15:04 #11
Var der nogen der forstod den sætning???
Avatar billede erikjacobsen Ekspert
12. december 2003 - 15:04 #12
Nej, så længe du ikke lukker connection vil mysql_insert_id/LAST_INSERT_ID
give dig det korrekte tal. Det er lavet til det.
Avatar billede detox Nybegynder
12. december 2003 - 15:06 #13
Ja, du får det sidste id der er genereret af dit script.
Avatar billede ztyxx Nybegynder
12. december 2003 - 15:08 #14
teoretisk set kan der jo være een der har kørt scriptet et kvart sekund efter danny_k selv har..
Avatar billede danny_k Nybegynder
12. december 2003 - 15:08 #15
Er dette forstået korrekt? Så længe mit programs connection er "i gang" så er der ikke andre der kan oprette et emne... de står i kø efter mig.
Avatar billede detox Nybegynder
12. december 2003 - 15:09 #16
Nej, de kan godt oprette et emne, men du får alligevel 'dit' sidste id returneret.
Avatar billede detox Nybegynder
12. december 2003 - 15:11 #17
Se fx:
http://www.mysql.com/doc/en/Miscellaneous_functions.html
under: LAST_INSERT_ID()
citat:
"The last ID that was generated is maintained in the server on a per-connection basis. This means the value the function returns to a given client is the most recent AUTO_INCREMENT value generated by that client. The value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own"
Avatar billede danny_k Nybegynder
12. december 2003 - 15:11 #18
OK! Jeg takker for nogle gode kommentarer, men jeg vil gerne af med pointene
Avatar billede detox Nybegynder
12. december 2003 - 15:14 #19
Velbekommen
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