Avatar billede speedpete Nybegynder
31. oktober 2007 - 10:38 Der er 8 kommentarer og
1 løsning

transaktioner via C#

Jeg har en .net applikation som bruger en MySQL6 som datagrundlag.
Hvis man bruger f.eks OdbcTransaction, er man så sikker på, at man låser databasen mellem start og slut på en transaktions-definition?

1 BeginTransaction
2 Læs tabeller ind i DataSet
3 Manipuler med tabellerne
4 Update data ned til MySQL
5 Commit /rollback

Altså kan man roligt foretage sig hvad som helst mellem 1 og 5?

Jeg har googlet lidt:
"An important property of transactions is that they are not visible to other sessions until they are complete and committed. No other thread can read inconsistent data from the table(s) while you are in the process of updating it."
(http://dev.mysql.com/books/mysqlpress/mysql-tutorial/ch10.html)
Avatar billede speedpete Nybegynder
31. oktober 2007 - 11:45 #1
http://msdn2.microsoft.com/en-us/library/cs6hb8k4(VS.71).aspx skriver:

If your underlying data source supports transactions, you can simulate pessimistic concurrency by updating your data within a transaction.

Så er det svaret?
Avatar billede speedpete Nybegynder
31. oktober 2007 - 11:55 #2
Mest for min egen skyld: http://www.databasejournal.com/features/mysql/article.php/3393161 om Isolation Levels i transactions
Avatar billede speedpete Nybegynder
31. oktober 2007 - 12:11 #3
Det ser ud til at man kan bruge BeginTransaction(IsolationLevel.Serializable)
Avatar billede speedpete Nybegynder
31. oktober 2007 - 15:29 #4
Næ, det duer vist ikke rigtigt.
Avatar billede arne_v Ekspert
31. oktober 2007 - 16:55 #5
Du laaser ikke noedvendigvis hele databasen.

Databasen laaser det som er noedvendigt for at opnaa det transaction isolation level
du har requested.
Avatar billede arne_v Ekspert
31. oktober 2007 - 16:58 #6
Mener du MySQL 6 ??  Den er kun i Alpha ! Og jeg ville naeppe bruge den til noget.

Husk ogsaa at transaktioner kraever InnoDB tabeller - MyISAM tabeller duer ikke.
Avatar billede neoman Novice
31. oktober 2007 - 17:21 #7
Jeg kan egentligt godt følge dig i dine tvivl - har selv fået dem. "An important property of transactions..." citatet kunne i en fortolkning antyde, at du har locket alle de underliggende tabeller, incl. dem som du læste fra først, indtil hele transactionen er committed. Hvis forbindelsen går ned midtvejs - så roller den vel back automatisk ? Håber en kyndig afklarer dette !:) Hvad siger arne_v?

Sådan helt på jorden, og ikke MySql-specifikt - hvis man i en transaction læser nogle tabeller, og på baggrund heraf efterfølgende opdaterer de og/eller andre tabeller, hvad sker der hvis en anden proces/tråd forsøgte at opdatere de indlæste tabeller imens?
Avatar billede arne_v Ekspert
31. oktober 2007 - 17:34 #8
Afhaenger af transaction islation level.

http://en.wikipedia.org/wiki/Transaction_isolation_level

Problemet er non repeatable reads.

Problemet er loest med serializable og repeatable read men ikke med read commited og read uncommited.
Avatar billede speedpete Nybegynder
06. november 2007 - 08:30 #9
Jeg samler det hele i http://www.eksperten.dk/spm/803519
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