| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 2
| REPLACE anstatt INSERT oder UPDATE?
Hallo, 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. Zwei Fliegen mit einer Klappe schlagen. Nicht schlecht... Was meint ihr? Ist mein Ansatz richtig? |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Sep 2009
Beiträge: 216
|
Hey, das Problem bei REPLACE ist, das er dein vorhandenen Eintrag löscht und einen neuen anlegt. Das würde heißen, das deine Person eine neue ID bekommt. REPLACE würde ich also nur nehmen, wenn es egal ist das die Indexe sich ändern. ON DUP. ist da besser. Aber am sichersten bis du mit select insert update. Mit freundlichen Grüßen Cas |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Aug 2010
Beiträge: 2
|
Das hatte ich gar nicht gedacht, dass die id's auch geändert werden, wenn REPLACE verwendet wird. Dann lieber ein einfaches INSERT und UPDATE. Danke CaselPasel ![]() Ich danke dir auch Armandosladen. Nur ich habe nicht ganz verstanden was du mit dieser if-Schleife gemeint hast. Das mit dem user-daten: Ich nehme an das waren nur ein Beispiel, nicht war? Geändert von Leyyin (16-08-2010 um 16:56 Uhr) |
| | |
| | #5 (permalink) |
| Gast
Beiträge: n/a
| Komplette abfrage
//check if we have a user with the same id $userExists=false; $replacevalues = array('&','/'," ","?","+","%","$","#","@"); $username=str_replace($replacevalues,"", $_POST['UserName']); $result = mysql_query("SELECT user FROM users WHERE user='$username'"); if (mysql_num_rows($result)==1){ $errorMsg="0"; } else if($_POST[Password1]!=$_POST[Password2]) { $errorMsg="1"; }else if(strlen($_POST[Password1])<6){ $errorMsg="2"; }else{ if(!mysql_query("INSERT INTO chatusers ( id , user , password , email , name ) VALUES ('$userId','$username', '$_POST[Password1]', '$_POST[Email]', '$_POST[Name]'')")) } Dieses zum besseren verständnis, hoffe es hilft |
|
![]() |
| Lesezeichen |
| Stichworte |
| insert, on duplicate key update, replace, update |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Update wie Insert bzw Insert an bestimmer Position? | dr monk | PHP und MySQL | 5 | 01-07-2010 09:48 |
| Update replace >> sql | deak | PHP und MySQL | 16 | 06-07-2009 18:21 |
| Update oder Insert Problem | bohnen | PHP und MySQL | 5 | 08-06-2006 19:30 |
| update oder insert | bubzilla | PHP und MySQL | 6 | 23-09-2005 15:07 |
| string formatierung vor DB Insert/Update | atothek | PHP und MySQL | 2 | 20-08-2004 11:58 |