Wyrażenia, które wywołują automatycznie COMMIT
Niektóre polecenia automatycznie kończą transakcję pomimo tego, że nie wykonamy explicite polecenia COMMIT.
ALTER TABLE | BEGIN | CREATE INDEX |
DROP DATABASE | DROP INDEX | DROP TABLE |
LOAD MASTER DATA | LOCK TABLES | RENAME TABLE |
SET AUTOCOMMIT=1 | START TRANSACTION | TRUNCATE TABLE |
Polecenie UNLOCK TABLES kończy transakcję ze skutkiem COMMIT nawet jeśli jakies tablice są w danym momencie zablokowane.
|
|
|
mysql> SAVEPOINT indetyfikator mysql> ROLLBACK TO SAVEPOINT indetyfikator |
Wyrażenie SAVEPOINT ustawia pewne miejsce w transakcji o nazwie indetyfikator. Jeśli jakaś transakcja ma już oznaczone w taki sam sposób (za pomocą tego samego inentyfikatora) miejsce, wówczas to miejsce jest zamazywane przez nowe miejsce.
Wyrażenie ROLLBACK TO SAVEPOINT cofa transakcję do punktu oznaczonego przez indetyfikator. Zmiany, które zaszły w rekordach po miejscu oznaczonym indetyfikatorem, są cofane poleceniem ROLLBACK, natomiast te, które były wykonane przed identyfikatorem, nie są cofane. Identyfikatory, które zostały ustawione po identyfikatorze, do którego odwołaliśmy się w poleceniu ROLLBACK TO SAVEPOINT są usuwane.
Jesli wyrażenie ROLLBACK TO SAVEPOINT zwraca błąd
|
|
|
ERROR 1181: Got error 153 during ROLLBACK |
to oznacza to, że nie istnieje miejsce oznaczone przez identyfikator, do którego się odnosiliśmy.
Jeśli użyjemy zwykłego COMMIT lub ROLLBACK, wówczas wszystkie identyfikatory miejsc zostaną usunięte.
Źródło: http://gryf.mif.pg.gda.pl/~mate/wyklady/bazy/transakcje.html
Listing
Ranga: Administrator serwisu Punktów: 0