MySQL Transaktion und Trigger

9

Ich habe schnell das MySQL-Handbuch durchgelesen, aber nicht die genauen Informationen zu meiner Frage gefunden. Hier ist meine Frage: Wenn ich eine InnoDB-Tabelle A mit zwei Triggern habe, die durch "NACH EINFÜGEN EINES A" und "NACH EINEM AKTUALISIEREN EIN" ausgelöst werden. Genauer gesagt: Ein Trigger ist definiert als:

%Vor%

Sie können die Abfrage zwischen BEGIN UND END ignorieren, im Grunde bedeutet das, dass dieser Trigger mehrere Zeilen in Tabelle B einfügt, die auch eine InnoDB-Tabelle ist.

Wenn ich jetzt eine Transaktion starte und dann viele Zeilen einfüge, sagen wir: 10K Zeilen, in Tabelle A. Wenn der Tabelle A kein Trigger zugeordnet ist, sind alle diese Inserts atomar, das ist sicher. Wenn Tabelle A nun mehreren Einfüge- / Aktualisierungs-Triggern zugeordnet ist, die viele Zeilen in Tabelle B und / oder Tabelle C usw. einfügen / aktualisieren, werden all diese Einfügungen und / oder Aktualisierungen immer noch atomar sein?

Ich denke, es ist immer noch atomar, aber es ist ziemlich schwierig zu testen und ich kann keine Erklärungen im Handbuch finden. Kann das jemand bestätigen?

    
WilliamLou 14.04.2010, 03:52
quelle

2 Antworten

5

Und atomar: Wenn eine Anweisung im Trigger fehlschlägt, schlägt die gesamte Anweisung fehl. Ja - der Auslöser wird im Zusammenhang mit der Transaktion der Anweisung ausgeführt. Und natürlich, wenn es keine Transaktion gibt, dann gibt es keinen Transaktionskontext.

  

Bei transaktionalen Tabellen sollte ein Fehler bei einer Anweisung zu einem Rollback aller von der Anweisung durchgeführten Änderungen führen. Das Fehlschlagen eines Triggers führt dazu, dass die Anweisung fehlschlägt, sodass ein Triggerfehler ebenfalls zu einem Rollback führt. Bei nichttransaktionsfähigen Tabellen kann ein solcher Rollback nicht durchgeführt werden. Obwohl die Anweisung fehlschlägt, bleiben alle vor dem Fehlerpunkt vorgenommenen Änderungen wirksam.

Und Sie dürfen keine Transaktion im Trigger starten.

    
Gerard ONeill 02.07.2015 20:35
quelle
3

Sie sollten atomar sein, wenn sie in einer Transaktion ausgeführt werden. Die MySQL-Seite für Trigger enthält die entsprechenden Informationen.

Ссылка

    
dhruvbird 10.06.2010 17:29
quelle