MySQLi - transakcje
Transakcja to sekwencyjna grupa operacji manipulowania bazą danych, która jest wykonywana tak, jakby była pojedynczą jednostką pracy. Innymi słowy, transakcja nigdy nie zostanie zakończona, chyba że każda pojedyncza operacja w grupie zakończy się sukcesem. Jeśli jakakolwiek operacja w ramach transakcji nie powiedzie się, cała transakcja zakończy się niepowodzeniem.
W praktyce wiele zapytań SQL połączysz w grupę i wykonasz wszystkie razem jako część transakcji.
Właściwości transakcji
Transakcje mają następujące cztery standardowe właściwości, zwykle określane skrótem ACID -
Atomicity- zapewnia pomyślne zakończenie wszystkich operacji w ramach jednostki pracy; w przeciwnym razie transakcja jest przerywana w momencie niepowodzenia, a poprzednie operacje są przywracane do poprzedniego stanu.
Consistency - zapewnia, że baza danych prawidłowo zmienia stany po pomyślnym zatwierdzeniu transakcji.
Isolation - umożliwia niezależne działanie transakcji i wzajemną przejrzystość.
Durability - zapewnia, że wynik lub skutek zatwierdzonej transakcji będzie trwał w przypadku awarii systemu.
W MySQL transakcje rozpoczynają się od instrukcji BEGIN WORK i kończą się instrukcją COMMIT lub ROLLBACK. Większość transakcji stanowią polecenia SQLi znajdujące się między instrukcją początkową i końcową.
COMMIT i ROLLBACK
Te dwa słowa kluczowe Commit i Rollback są używane głównie do transakcji MySQL.
Po pomyślnym zakończeniu transakcji należy wydać komendę COMMIT, aby zmiany we wszystkich zaangażowanych tabelach odniosły skutek.
W przypadku niepowodzenia należy wydać komendę ROLLBACK, aby przywrócić poprzedni stan każdej tabeli, do której odwołuje się transakcja.
Możesz kontrolować zachowanie transakcji, ustawiając zmienną sesji o nazwie AUTOCOMMIT. Jeśli AUTOCOMMIT ma wartość 1 (wartość domyślna), to każda instrukcja SQL (w ramach transakcji lub nie) jest uważana za transakcję zakończoną i domyślnie zatwierdzana po jej zakończeniu. Gdy AUTOCOMMIT jest ustawiony na 0, przez wydanie polecenia SET AUTOCOMMIT = 0, kolejna seria instrukcji działa jak transakcja i żadne działania nie są zatwierdzane, dopóki nie zostanie wydana jawna instrukcja COMMIT.
Możesz wykonać te polecenia SQL w PHP przy użyciu mysqli_query() funkcjonować.
Ogólny przykład transakcji
Ta sekwencja zdarzeń jest niezależna od używanego języka programowania; ścieżkę logiczną można utworzyć w dowolnym języku używanym do tworzenia aplikacji.
Możesz wykonać te polecenia SQL w PHP przy użyciu mysqli_query() funkcjonować.
Rozpocznij transakcję, wydając polecenie SQL BEGIN WORK.
Wydaj co najmniej jedno polecenie SQL, takie jak SELECT, INSERT, UPDATE lub DELETE.
Sprawdź, czy nie ma błędu i wszystko jest zgodne z wymaganiami.
Jeśli wystąpi błąd, wydaj polecenie ROLLBACK, w przeciwnym razie wydaj polecenie COMMIT.
Typy tabel bezpiecznych dla transakcji w MySQLi
Nie możesz używać transakcji bezpośrednio, możesz, ale nie byłyby one bezpieczne i gwarantowane. Jeśli planujesz używać transakcji w programowaniu MySQLi, musisz stworzyć swoje tabele w specjalny sposób. Istnieje wiele typów tabel, które obsługują transakcje, ale najpopularniejszy jestInnoDB.
Obsługa tabel InnoDB wymaga określonego parametru kompilacji podczas kompilowania MySQLi ze źródła. Jeśli Twoja wersja MySQLi nie obsługuje InnoDB, poproś swojego dostawcę usług internetowych o zbudowanie wersji MySQLi z obsługą typów tabel InnoDB lub pobierz i zainstaluj binarną dystrybucję MySQL-Max dla Windows lub Linux / UNIX i pracuj z typem tabeli w środowisko programistyczne.
Jeśli Twoja instalacja MySQLi obsługuje tabele InnoDB, po prostu dodaj plik TYPE = InnoDBdefinicja do instrukcji tworzenia tabeli. Na przykład poniższy kod tworzy tabelę InnoDB o nazwie tutorials_innodb -
root@host# mysql -u root -p;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_innodb
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)
Sprawdź poniższy link, aby dowiedzieć się więcej o - InnoDB
Możesz użyć innych typów tabel, takich jak GEMINI lub BDB, ale to zależy od twojej instalacji, czy obsługuje te dwa typy.