Avatar billede elites Nybegynder
03. december 2001 - 10:36 Der er 9 kommentarer og
1 løsning

lås af rækker i mysql

Jeg er i gang med et mindre projekt og har fået et lille problem!

Vi er ved at lave et system i java, hvor vi har en metode som henter en række i databasen! ( en kunde f.eks.) Der kan så godt gå noget tid før end den returneres ændret i databasen!

Denne kunde må  derfor ikke kunne tilgås af andre klienter, så længe at den behandles af den klient der \"låser\" den!!

Vi ved at man kan bruge locking.. men den låser hele tabellen ikke kun rækken..

Vi har tænkt på noget med transactioner ,,, men ved ikke om det er løsningen!!

På forhånd tak

Avatar billede a_c Nybegynder
03. december 2001 - 11:04 #1
Så vidt jeg ved understøtter MySQL endnu ikke transaktioner. Det skulle dog være på vej.
Du må nok finde en anden metode.
Du kan f.eks. hive data op og lave ændringer.
Inden du laver opdateringerne låser du tabellen og tjekker på om data er blevet ændret siden du hentede dem. Hvis de er kan opdateringen ikke gennemføres og du giver en fejlmeddelse til brugeren. Hvis der ikke er blevet pillet ved data kan du gennemføre opdateringen og frigive låsen.
På den måde minimerer du tiden tabellen er låst og det eneste du skal gøre er sådan set bare at holde styr på hvordan data så ud dengang du hentede dem.
Det er ihvertfald en mulighed. Spørgsmålet er jo hvor ofte brugeren vil opleve at data er blevet opdateret i mellemtiden?.........men det ved du nok bedst selv.
Jeg har selv brugt denne metode med succes.
m.v.h.
A_C
Avatar billede rolchau Nybegynder
03. december 2001 - 13:26 #2
Selvfølgelig understøtter MySQL transaktioner.
Avatar billede a_c Nybegynder
03. december 2001 - 13:57 #3
Hvilken version taler vi om? og hvilken version bruger du elites?
Avatar billede a_c Nybegynder
03. december 2001 - 14:03 #4
rolchau >> Du har ret. I den nye version er transaktioner understøttet... Men at det ligefrem er en selvfølge det ved jeg nu ikke.

A_C
Avatar billede elites Nybegynder
03. december 2001 - 14:07 #5
Har lige prøvet at instalere 4.0.. men kender ikke syntaxen!!! Ved sku ikke.. hvordan man sætter en transaktion op så ingen andre kan tilgå en række mens den bliver brugt..
Har læst at 4.0 understøtter row locking.. men ved ikke hvordan man implementerer det i programkoden!!

Elites
Avatar billede a_c Nybegynder
03. december 2001 - 14:12 #6
Jamen det lyder som om det er en Lock og ikke en transaktion du har brug for. En transaktion bruger du f.eks. når du laver opdateringer til flere tabeller og du ønsker at sikre at enten alle eller ingen opdateringer går igennem.
Her kan du læse om syntaxen for Locks:
http://www.mysql.com/doc/L/O/LOCK_TABLES.html
Avatar billede elites Nybegynder
03. december 2001 - 22:50 #7
Kan godt se din point.. men mysql understødter ikke row locking ordentligt... jeg kan i hvert fald ikke få den til det.. Og at locke en helt tabel pga en række.. Nøj.. den holder ikke!!!
Avatar billede a_c Nybegynder
04. december 2001 - 08:09 #8
Hmmm... OK . Der står ellers udtrykkeligt på deres hjemmeside at MySQL 4.0 understøtter rowlocking.
A_C
Avatar billede a_c Nybegynder
04. december 2001 - 08:20 #9
Hey Check hvad jeg fandt her.
En præsentation der måske kan hjælpe. Du skal på siden nok lige klikke next nede i venstre hjørne et par gange inden du kommer til Locks:
http://www.nusphere.com/presentations/oscon_isolation/slide_01.htm

A_C
Avatar billede elites Nybegynder
04. december 2001 - 11:09 #10
Jeg ved godt at mysql 4.0 understøtter row locking... hvad jeg ikke ved er hvordan man implementerer det i sourcen!!!
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