Zurück   Flashforum > Flash und Server > PHP und MySQL

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-08-2010, 17:00   #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?
Leyyin ist offline   Mit Zitat antworten
Alt 10-08-2010, 06:59   #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
CaselPasel ist offline   Mit Zitat antworten
Alt 12-08-2010, 15:13   #3 (permalink)
Armandosladen
Gast
 
Beiträge: n/a
Meine Lösung

if(!mysql_query("INSERT INTO DeinTable ( id , user , password , email )
VALUES ('$userId','$username', '$_POST[Password1]', '$_POST[Email]')"))

So hab ich das gelöst
  Mit Zitat antworten
Alt 16-08-2010, 16:51   #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)
Leyyin ist offline   Mit Zitat antworten
Alt 16-08-2010, 23:07   #5 (permalink)
Armandosladen
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
  Mit Zitat antworten
Alt 17-08-2010, 06:06   #6 (permalink)
Inventar
 
Benutzerbild von Nightflyer
 
Registriert seit: Jul 2002
Beiträge: 6.882
Zitat:
Zitat von Leyyin Beitrag anzeigen
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?
Es gibt keine if-Schleifen!!
__________________
(\__/)
(='.'=)
(")_(")
Nightflyer ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
insert, on duplicate key update, replace, update

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ä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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele