woodfighter: MySQLi transaction/commit/rollback

Beitrag lesen

Tach,

Ja, solange a.php nicht komplett ausgeführt wird, findet kein implizites Ende der Transaktion statt.

HM, hier würd ich es gern genau wissen, da ich mir hier unsicher bin. Also bis a.php fertig ist oder bis b.php die Datenverbindung beendet?

die Transaktion endet bei den folgenden Vorkomnissen: Explizit durch Commit oder Rollback, Implizit durch Ende der Datenbankverbindung, letzteres passiert IIRC in PHP ebenfalls implizit, wenn das Script, das die Verbindung geöffnet hat, endet. Da dein a.php ja b.php aufruft, kann es allerdings erstmal nicht vor b.php enden, solange du das nicht explizit hervorrufst (und Multthreading ist in PHP immer noch eher selten).

Transaktion […] commit […] rollback

Na das war gut erklärt, Danke. aus dem php Manual hab ich das nicht wirklich heraus gelesen.

Da es hier um Datenbank-Termini geht, ist das PHP-Manual auch eher der falsche Ort zur Erklärung.

Wenn a.php seine Transaktion vor c.php gestartet hat und beide konkurrierend auf den selben Datenbestand schreiben wollen, dann wird die Transaktion aus c.php praktisch immer warten müssen.

Was ist der selbe Datenbestand? die gleiche Datenbank oder z.b eine gleiche tabelle in der DB?

Das kann ich mit einem klaren „Ja“ beantworten. Die dritte Alternative wären übrigens die betroffenen Datensätze in den betroffenen Tabellen. Was exakt für dich zutrifft, findest du beim Stichwort Locking im Handbuch von MySQL.

mfg
Woodfighter

P.S.

mfg
Woodfighter

Bitte beim zitieren, diejenigen Teile, die fürs Verständnis nicht mehr nötig sind, möglichst entfernen