hawkmaster: Insert Fehler vermeiden durch Transaktionen?

Beitrag lesen

Hallo zusammen,
ich hatte bisher noch nichts mit MySQL und Transaktionen zu tun gehabt.

Bei folgender Situation frage ich mich, ob dies vielleicht sinnvoll wäre:

Ein Anwender gibt über eine Webandendung (PHP mit PDO) Daten in eine MySQL DB ein.

1. Speicherung von Kundenname, Kundennummer etc. in Tabelle "kunde", Rückgabe neue "kundenid"
2. Speicherung von Vertragsdaten wie Vertragsnr. Datum, Beschreibung in Tabelle "vertrag", Rückgabe neue "vertragid".
3. Speicherung von  "kundenid" und "vertragid" in Relationstabelle "kunde_vertrag_rel"

Ich hatte in einem internen Test einen Fall, wo Step 1 und 2 gemacht wurde, aber die Relationstabelle Eintrag fehlte bzw. ich die "vertragid" nicht finden konnte.

Könnte man obiges Szenario mit einer Transaktion absichern?
Momentan sind die Tabellen MyISam. Die müsste man vermutlich auf Innodb umstellen?

Was mir nicht ganz klar ist: Bei der Speicherung der Daten macht das PHP Script vorher diverse Prüfungen, ob z.b. der Kundenname schon da ist oder nicht.

Ein verkürztes Beispiel

  
..  
$check_kunde = get_KundenDaten();  
  
if(....){//Wenn kunde noch nicht vorhanden  
$neueKundeid = InsertKundenData($Customername,$Customernumber..//Insert Kunden Daten in "kunde" Tabelle  
}  
..  
$newvertragyid = InsertVertrag($_POST['vertragnr'].....//insert in "vertrag" Tabelle  
  
if( (!empty($neueKundeid)) AND (!empty($newvertragyid)) ){//  
...  
InsertRelCustomerOppnr($neueKundeid,$newvertragyid );//Eintrag Relations Tabelle  
  
if( (empty($neueKundeid)) AND (!empty($newvertragyid)) ){//wenn unter gleichem Kunde Name ein neuer Vertrag eingegeben wird  
$neueKundeid= get_KundenID(.....);//vorhandene Kundenid holen  
InsertRelCustomerOppnr($neueKundeid,$newvertragyid );//Eintrag Relations Tabelle  
  

Was ich damit fragen will:
Wie kann man obige Logik mit einer Transaktion verbinden?
In einer Transaktion selbst kann man ja nur SQL Befehle absetzen oder?

vielen Dank und viele Grüße
hawk