Einzelnen Beitrag anzeigen
  #1  
Alt 08.08.2010, 20:50:35
Leyyin Leyyin ist offline
Anfänger
 
Registriert seit: May 2010
Alter: 44
Beiträge: 67
REPLACE anstatt INSERT oder UPDATE?

Hallo ihr lieben,

ich kann mich nicht entscheiden, welche von den folgenden Varianten beim Datenmanipulation besser ist:
  1. INSERT oder UPDATE
  2. Nur REPLACE
  3. Nur INSERT ... ON DUPLICATE KEY UPDATE

z.B. habe ich eine Tabelle namens "person":
person(id, vorname, nachname, email, beruf)
In dieser Tabelle sind zwei Spalten als unique-index definiert: id (PRIMARY KEY, AUTO INCREMENT) und email...

Wenn ich Daten für eine Person in DB einfügen möchte soll das skript zuerst prüfen, ob die gegebene email-Adresse schon in DB existiert und dann wie folgt behandeln:
  1. Falls diese email in DB nicht existiert -> INSERT INTO
  2. Andernfalls -> UPDATE

In MySQL-Referenzbuch steht so:
"Generell sollten Sie von der Verwendung einer ON DUPLICATE KEY-Klausel bei Tabellen mit mehreren eindeutigen Indizes absehen. "
In diesem Fall wird die 3. Wahrscheinlichkeit automatisch disqualifiziert.
Wir kommen nun zu anderen beiden:

Ich kann UPDATE nur dann benutzen, wenn eine Zeile existiert aber REPLACE auch dann, wenn die Zeile noch nicht angelegt wurde (in diesem Fall übergeht MySQL einfach den Löschvorgang und behandelt wie ein INSERT INTO). Ist es dann nicht sinvoll, dass ich anstatt obige Prüfung einfach nur REPLACE verwende? Auf dieser Weise habe ich nur eine Query statt zwei.
Übrigens kann ich dieselbe Query auch beim "Profil bearbeiten" benutzen. Zwie Fliegen mit einer Klappe schlagen. Nicht schlecht...

Was meint ihr? Ist mein Ansatz richtig?
Mit Zitat antworten