Avatar billede bootie Nybegynder
14. januar 2003 - 22:47 Der er 12 kommentarer og
1 løsning

Opret vare og få samtidig ID nummer tilbage!

Hej experter

Jeg ved ikke om dette spørgsmål skulle have været i noget SQL kategori istedet...

Men sagen er den at jeg opretter en port i min MySQL db med en INSERT INTO
Den port har så en ID eller i mit tilfælde et felt der hedder varenummer
Findes der en SQL der samtidig med at oprette posten returnere værdien af varenummer i den post den lige har oprettet?

Er der nogle der kan følge mig i det?
Avatar billede bootie Nybegynder
14. januar 2003 - 22:49 #1
Det er vel en slags kombineret SELECT og INSERT!
Avatar billede eagleeye Praktikant
14. januar 2003 - 22:54 #2
Prøv at kigge her men jeg er ikke sikker på den virker i MySQL:
http://www.4guysfromrolla.com/webtech/tips/t122600-1.shtml
Eller måske dette:
http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=79
Avatar billede eagleeye Praktikant
14. januar 2003 - 22:55 #3
Avatar billede bootie Nybegynder
14. januar 2003 - 23:12 #4
Ok, de links fik jeg ikke så meget ud af.

Nu lige lidt om schedulereing i ASP..
Kan en ASP side blive interupted?

Fordi så kan man jo bare lave en SELECT der finder den største værdi af vare_nummer ( som er auto_incremental )

Ellers er der jo mulighed for at der er en anden der lige når at oprettet en post lige inden den anden skal til at lave en SELECT DEN STØRSTE VÆRDI!!
Avatar billede bootie Nybegynder
14. januar 2003 - 23:13 #5
Interrupted af en anden side med en anden bruger på hvis du forstår hvad jeg mener
Avatar billede eagleeye Praktikant
14. januar 2003 - 23:18 #6
Ja i følge teksten er der en ID pr connection så man skulle kunne gøre sådan her:

SQL = "INSERT INTO tablenavn (kolonne) VALUES('text');"
Conn.Execute (SQL)

SQL = "SELECT LAST_INSERT_ID() FROM tablenavn;"
Set rs = Conn.Execute (SQL)
Response.write "Nyeste ID er : " & rs(0)
Avatar billede bootie Nybegynder
14. januar 2003 - 23:21 #7
Ok

Men ved du om et ASP script kan blive interrupted af den samme script bare med en anden bruger der *exekvere* den?
Avatar billede eagleeye Praktikant
14. januar 2003 - 23:24 #8
Ja der kan godt være på brugere på køre samme script på samme tid, men det vil være to forskellige connection og hvis det passer hvad de skriver vil der være en LAST_INSERT_ID() pr connection.

"The most recently generated ID is maintained in the server on a per-connection basis. It will not be changed by another client."
Avatar billede eagleeye Praktikant
14. januar 2003 - 23:26 #9
Ja der kan godt være på brugere på køre samme script

Ja der kan godt være to eller flere brugere som køre samme script
Avatar billede bootie Nybegynder
14. januar 2003 - 23:32 #10
Det jeg mener er om du kan interupte hinanden?

Hvis fx man har koden

connection.Execute("INSERT INTO bla VALUES ( bla )")
Set rs = connection("SELECT LAST_INSERT_ID() FROM bla")

Hvis der så er en bruger der *køre* scriptet på samme tid, men den der først køre når kun til den første connection.Execute og så kommer den anden og køre begge og så kommer den første tilbage og udføre sin sidste conn.execute..

Nu har vi jo et lille problem.

Begge brugere vil tilsyneladende have oprettet den samme post..
Den første brugeres rs vil indeholde den den post som den sidste bruger oprettede jo.
Dette er sikkert kun et problem på meget store systemer med en masse brugere, men man skal vel alligevel gøre sig det for øje.
Kan man syncronicere asp sider eller er de automatisk det?
Avatar billede bootie Nybegynder
14. januar 2003 - 23:33 #11
Hvis der så er en bruger der *køre*
              to
Avatar billede eagleeye Praktikant
14. januar 2003 - 23:39 #12
Jeg ved ikke helt hvordan jeg skal sige det.
Hver bruger køre ASP filen men det vil være hver sin tråd på serveren så de to sider ikke har noget med hinanden at gøre. Hvis det var samme variable som to bruger brugte på en side ville det ende helt galt hvis man bare har 5-6 bruger online.

Hver tråd får så hver sin connection til databasen så selv bruger2 lige når at indsætte før bruger1 hendte ID, så ændre det ikke på bruger1 ID. Hvis jeg læser detsom der står på mysql.com rigtigt, hvilket jeg mener jeg gør ;)
Eller så afvis mit svar og sprøg i MySQL kategorien.
Avatar billede bootie Nybegynder
15. januar 2003 - 00:00 #13
Nej, for nu er det jo at asp spørgsmål vi er igang med.

Du skriver rigtig nok at de 2 brugere ikke bruger de samme variabler, men de bruger jo den samme DB!

Men hvis den enes insert ikke influrere den andens selv om dette skulle ske på samme tid er den fin nok med mig. .. Der hvor jeg kunne se problemet:

Bruger1: connection.execute(INSERT SQL) <- Her bliver bruger1 interrupted og bruger2 kommer til.
Bruger2: connection.execute(INSERT SQL)
Bruger2: Set rs = connection.execute(senest lavet post (bruger2)) <- Har er bruger2 færdig og bruger1 får nu cpu tid igen
Bruger1: Set rs = connection.execute(senest lavet post (bruger2))

Hvis kørslen af scriptet er sådan er det uhensigtsmæssig.

Men hvis bruger1 alligevel vil få fat i sin senest oprettet post er der jo ingen problemer.
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
Kurser inden for grundlæggende programmering

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