[mysql/odbc] atomic queries

Pagina: 1
Acties:

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
Via een remote MyODBC connection werk ik via een VisualC programmatje een aantal tabellen bij. Daarbij moeten vier queries atomic uitgevoert worden, zodat als de verbinding weg zou vallen dat ze of alle vier wel of alle vier niet worden uitgevoert (de operatie hoeft wat mij betreft op de server zelf niet atomic te zijn, als deze halverwege zou crashen gaat er toch een backup van een uur geleden terug op en zijn de wijzigingen zou wie zo ongedaan gemaakt).

Normaal gesproken zou je hiervoor een transactie starten, de vier queries uitvoeren en aan het eind een commit doen. Nu gaat dat in dit geval niet. Het plaatsen van de queries in een procedure kan volgens mij met mysql ook niet.

Zijn er nog andere mogelijkheden om er toch voor te zorgen dat als de client/connectie tijdens het uitvoeren ervan wordt afgebroken, dat de queries alleen als geheel worden uitgevoerd? De operatie zelf kost niet veel tijd (tabel locken, alle rows verwijderen, de tabel weer vullen met rows uit een andere tabel en de tabel weer unlocken), dus de kans is niet zo heel erg groot - maar ook niet verwaarloosbaar klein.

(mmm. wordt tijd om mysql eens te gaan vervangen door postgres...)

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Ik heb totaal geen verstand van transacties, maar vanmiddag zat ik toevallig een beetje door de MySQL manual te bladeren, en toen las ik dit:
If you want to switch from AUTOCOMMIT mode for one series of statements, you can use the BEGIN or BEGIN WORK statement:

BEGIN;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
(http://www.mysql.com/doc/C/O/COMMIT.html)

is dat misschien een oplossing? (zal wel niet :))

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Het gebruik van transacties binnen MySQL is wel mogelijk als je gebruik maakt van InnoDB tabellen. Hiermee is het ook mogelijk om foreign keys te gebruiken in MySQL.

Verwijderd

Ik heb inderdaad pas gelezen dat het kan met InnoDB tabellen. Op dit moment zijn het echter MyISAM tabellen (en volgens mij heeft degene die de server onderhoud nog geen innodb geinstalleerd) en om nu heel de database om te gooien vanwege 1 onbelangrijk programmatje dat dan alleen de transactie nodig heeft om te garanderen dat de queries via de remote connection aankomen...

Maar goed, als er dus geen manier is om de vier queries tegelijkertijd over de remote connection te sturen, dan zit er niet veel anders op dan de transactie inschakelen of de client zo aanpassen dat het zelfs na een onderbreking nog de queries uitvoert.
Ik heb totaal geen verstand van transacties
...
is dat misschien een oplossing? (zal wel niet )
Het voorbeeld dat je gaf is een transactie ;)

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Wat je zou kunnen doen is bij elke query apart kijken of de query goed is uitgevoerd en of de database verbinding er nogsteeds is.

Wanneer dat ergens niet zo is, moet er opnieuw een verbinding met de server worden gezocht, waarna je zelf de query's ofwel undoet of de resterende alsnog invoert.

Dit zal alleen nooit zo veilig zijn als transacties ;)