Witam
Teoretycznie wiem jak zastosować transakcje, chodzi mi bardziej o praktykę. Mam program napisany w turbo delphi explorer, łączę się z bazą danych mysql przez dbx. Mam już operację wstawiania, usuwania, edytowania itd. Nie mam tylko transakcji. Tak jak pisałem na początku teoretycznie wiem że ma być coś w stylu:
start transaction;
zapytanie 1;
zapytanie 2;
commit;
Problem w tym, że nie wiem jak mam to zapisać w programie. Do łączenia z bazą danych wykrzystuję komponenty SQLConnection i SQLQuery. Czy w którymś z tych komponentów jest opcja np. SQL.Query.cos_tam.StartTransaction; ?? Następnie wydałbym kilka zapytań do bazy przez SQLQuery.SQL.Text := 'zapytanie 1'; ExecSQL;
SQLQuery.SQL.Text := 'zapytanie 2'; ExecSQL;
i ostatecznie SQLQuery.cos_tam.Commit; - tylko nie wiem czy tak się da.
Drugim moim pomysłem jest takie zapisanie w programie:
SQLQuery.SQL.Text := 'Start transaction'; ExecSQL;
SQLQuery.SQL.Text := 'zapytanie 1'; ExecSQL;
SQLQuery.SQL.Text := 'zapytanie 2'; ExecSQL;
SQLQuery.SQL.Text := 'Commit'; ExecSQL;
Tylko też nie wiem czy to będzie dobrze. Jak prawidłowo powinienem używać transakcji w mysql z wykorzystaniem dbx? Czy transkacje używać tylko do update, insert, delete? Czy do select też?
Mam jeszcze jedno pytanie. Czytałem, że jeśli w mysql chcę używać transakcji to muszę najpierw wydać polecenie SET AUTOCOMMIT = 0; Problem w tym, że nie wiem kiedy mam wpisywać to polecenie. Czy wystarczy raz, kiedy uruchomię serwer MySQL i ta opcja będzie zapamiętana na stałe - nawet jeśli uruchomię ponownie komuter? Czy może muszę za każdym razem kiedy uruchomię serwer wpisywać SET AUTOCOMMIT = 0; To drugie rozwiązanie może być uciążliwe. A może w programach klienckich za każdym razem kiedy łączą się z mysqlem wpiswyać SQLQuery.SQL.Text := 'SET AUTOCOMMIT = 0;' - tylko czy to nie będzie źle jeśli kilku klientów połączy się z bazą i każdy będzie chciał ustawić tą opcję?
Wiem, że dużo mam pytań, ale bardzo tego potrzebuję. Proszę o pomoc.