hotti: Insert Fehler vermeiden durch Transaktionen?

Beitrag lesen

hi,

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?

Auf jeden Fall.

Momentan sind die Tabellen MyISam. Die müsste man vermutlich auf Innodb umstellen?

Yes.

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.

Einfacher mit Insert on duplicate key update.

[..]

Wie kann man obige Logik mit einer Transaktion verbinden?

Set AutoCommit = 0, set RaiseError = 1, in einem try{} die Statements absetzen, in catch(){} ggf. ein Rollback und wenn der try{} erfolgreich war ein Commit.

RaiseError: Erhebt SQL-Fehler in den status einer Exception. In PHP::PDO mal nachlesen, ob das machbar ist, in Perl geht das auf jeden Fall.

Horst