Avatar billede mester9 Nybegynder
30. august 2005 - 10:55 Der er 5 kommentarer og
1 løsning

synkronisering / undgåelse af opdatering af samme felt

hejsa,

Mit spørgsmål lyder således. Hvis man har en tabel med en hel masse data, og der er mulighed fra nettet for at gå ind og opdatere nogle felter i en "row" fra forskellige brugere, hvordan undgår jeg så at 2 brugere fx går ind og opdaterer samme felt på samme tid?? Jeg ved at hvis man bruger java, så kan man bruge synchronize metoder, men hvordan gør man det i php/mysql??? 

Altså nu giver jeg bare et lille eksempel. Fx har man en auktion, og der er 2 brugere der byder på en vare på 50 kr samtidig... hvis der så ikke er styr på tabellen, så sker der vel en fejl for den ene bruger eller også går feltet i ged....

Nogen der har et bud?
Avatar billede arne_v Ekspert
30. august 2005 - 12:33 #1
hvis du bruger InnoDB tabeller så kan du bruge database transaktioner med
MySQL

det vil muligvis kunne løse dit problem

[med MyISAM tabeller kan man som workaround lave LOCK og UNLOCK på tabellen
men performance bliver ikke super på den måde]
Avatar billede arne_v Ekspert
30. august 2005 - 12:34 #2
I nogle tilfælde skal man bruge versioning til at sikre mod flere rettelser af
samme data
Avatar billede mester9 Nybegynder
30. august 2005 - 17:57 #3
Ja, jeg bruger også InnoDB og transaktioner, men var bare ikk helt sikker på om transaktioner løser problemet....  Og skulle bare høre om der var nogen gode ideer angående dette, elller om nogen havde siddet i samme problemstilling....
Avatar billede arne_v Ekspert
30. august 2005 - 18:01 #4
database transaktioner med passende transaction isolation level beskytter
mod samtidigheds problemer mellem forskellige tråde som udfører en eller
flere SQL sætninger

de er ikke egnet til samtidigheds problemer hvor det er først en eller flere
SQL sætninger, så en menneskelig interaktion som kan tage mange sekunder/minutter
og så en eller flere SQL sætninger - det løses bedst med versioning

jeg kan ikke gennemskue udfra din beskrivelse om det er det ene eller det andet
som er mest relevant for dig
Avatar billede mester9 Nybegynder
30. august 2005 - 18:08 #5
Ja, du har ret.......  Fandt lige også svaret her, http://dev.mysql.com/doc/mysql/en/innodb-transaction-model.html
mysql laver automatisk en lock af hele tabellen når man er igang med en transaktion, medmindre tabellen er indexed, så laver den kun lock på den række den arbejder med.... (det er vist det der står i mysql dokumentationen i linket) 

men fyr du bare et svar, så får du point.....
Avatar billede arne_v Ekspert
30. august 2005 - 18:13 #6
kommer her
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



IT-JOB