Avatar billede spottie Nybegynder
18. maj 2006 - 21:09 Der er 10 kommentarer og
1 løsning

Vedr. spørgsmål omkring database mulige problem?

Goddag Eksperter

Jeg ville bare høre om hvis nu man har en Windows Applikation hvor der skal indvolveres en MySQL database, kan følgende så give problemer:

1)Hvis nu man antager at f.eks. 2 ersoner sidder med en kørende windows applikation op mod den samme database, hvad sker der så? Får den ene så lov at rette og bagefter retter den anden forespørgsel?

2) Nogen der kan fortælle lidt om LOCK og UNLOCK kommandoen og skal disse på for at slippe for problemet i spørgsmål 1?

3) Nogen der kan give eksempel på syntax kode med LOCK og UNLOCK?

4) Kan man på nogen måde definere en fejl kode hvis nu man prøver at få adgang til en databse der er LOCK?
Tænker f.eks. på Try/Catch i sin klasse?

5) Kan man i en C# med Try/Catch i sin klasse, lave en mysql error message ligesom i PHP eller?

Håber at høre fra nogen.

vh spottie
Avatar billede arne_v Ekspert
18. maj 2006 - 21:19 #1
re 1)

hvis ikke de skal rette i samme data saa kan de godt lave noget samtidigt

re 2)

LOCK og UNLOCK er en maade at loese problemet paa

men en ret primitiv maade

hvis du skifter fra MyISAM tabeller til InnoDB tabeller kan du bruge transactions
til at sikre mod samtidigheds problemer

re 3)

er i manualen

men som sagt er der bedre maader

re 4)

jeg mener at den block fremfor at give fejl

re 5)

jeg mener bestemt at MySQL error text ligger i Exception objektet
Avatar billede spottie Nybegynder
19. maj 2006 - 08:27 #2
Oki..takker..

Er transaction den bedste måde?

Det der skal ske er bare sådan at man ikke skal kunne redigere i samme data på samme tid, hvad anbefaler du man bruger der, altså f.eks. ikke insert og update og lign i samme data?

spottie
Avatar billede arne_v Ekspert
19. maj 2006 - 13:30 #3
hvis der kun skal laases i kort tid (millisekunder) så er transaktioner den rigtige
løsning og den løsning osm bruges i alle professionelle systemer

hvis der skal låses i længere tid bruger man normalt et version pattern
Avatar billede spottie Nybegynder
22. maj 2006 - 10:02 #4
arne_v... Tak for hjælpen, det skal kun være sådan at man ligesom gør således at flere personer ikke kan skrive til samme data samtidig elelr en person prøver at trække data ud mens de bliver rettede i, men det er kun enten mens man lægger data ved select ned i DataSet i C# elelr man kører en query til insert og lign.

Hvad anbefaler du der arne?

Har aldrig rodet med transactioner, kan du give et syntax eksempel?

spottie
Avatar billede arne_v Ekspert
23. maj 2006 - 04:08 #5
Jeg har vist lidt kode her http://www.eksperten.dk/spm/710408

Men jeg er stadigvæk ikke sikker på om det er kort eller lang tid der skal låses
Avatar billede spottie Nybegynder
23. maj 2006 - 08:47 #6
arne_v...

1) Det er nok kun kort tid når jeg laver udtræk i en mysql prompt drejer det sig om 0.10 sek højest tror jeg, hvor er skalaen fra hvad er kort tid og hvad er lang tid?

2) Men hvad er transaktion, er det en form for "session" der gør at udanset hvad der sker så udføres det som er inde i en transaction?

3) Kan du forklare hvad er hvornår bruges commit og rollback?

vh spottie
Avatar billede arne_v Ekspert
24. maj 2006 - 02:09 #7
eksempel på kort tid:

2 process/tråde kører samme kode som indeholder 2 SQL sætninger
tiden mellem de 2 SQL sætninger er måske 20 millisekunder, så
er transaktion den helt rigtig løsning

eksempel på lang tid:

du har noget hent og noget opdater kode, hver bruger kalder hent kode,
sidder og retter i data i en 5-10 minutter og kalder så opdater koden, så
er transaktion ikke den rigtige løsning
Avatar billede arne_v Ekspert
24. maj 2006 - 02:10 #8
en transaktion er en bundtning af flere SQL sætninger

commit = udfør dem alle sammen

rollback = udfør ingen af dem (eller annuller dem alle sammen hvis du vil tænke på det på den måde)
Avatar billede spottie Nybegynder
24. maj 2006 - 08:24 #9
arne_v... oki forstår jeg ikke ...

Jeg har en windows applikation på 5 maskiner.

Her kan jeg risikere at PC1 prøver at udføre en redigering i en database samtidig med at PC2 udføre samme redigering i samme data altså udføre 2 forskellige PC'er redigering, giver det ikke fejl?

skal være således at 5 PC'ere skal kunen arbejde i samme database samtidig, hvordan gør man det så de ikke får fejl? eller behøver man ikke gøre noget?

Håber du kan hjælpe..

spottie
Avatar billede arne_v Ekspert
25. maj 2006 - 02:23 #10
lad os antage at den redigering består af en SELECT og en UPDATE

hvis programmet er sådan at når brugeren klikker save så udføres både SELECT
og UPDATE så er transaction det rigtige

hvis programmer er sådan at når brugeren klikker load så udføres select
og når brugeren klikker save så udføres update, så skal du kigge på alternativer
til transaction

det afgørende er om det er lang tid (p.g.a. menneskelig interaktion) mellem
de ting der skal hænge sammen uden forstyrrelser
Avatar billede spottie Nybegynder
31. maj 2006 - 09:06 #11
lukker
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