Eurokicker
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 04.08.2007, 14:51   #1
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

[MySQL] INSERT oder UPDATE ?


Jeder kennt es - es soll ein Datensatz in eine Tabelle eingetragen werden.
Die Tabelle hat ein Schlüsselfeld, das eindeutig ist.

Führt man einen Insert aus und der Key ist schon vorhanden, löst das ein Fehler aus, also muss man folgendes machen:
1. Abfragen ob der Key schon vorhanden ist
2. Ist vorhanden => UPDATE, sonst INSERT

Man muss also 2 Abfragen machen.
Findige User sagen: okay, probieren wir erst UPDATE

PHP-Code:
mysql_query("UPDATE tabelle SET ...");
if(!
mysql_affected_rows() {
   
mysql_query("INSERT INTO tabelle SET ...");

Die Methode hat einen Haken. MySQL überprüft bei einem UPDATE, ob es überhaupt neue Werte gibt. ist das nicht der Fall, macht es nichts, die Rückgabe der betroffenen Datensätze wäre dann 0.
Unsere Abfrage würde greifen, einen INSERT durchführen und einen Fehler auslösen.

MySQL hat einen pfiffigen Befehl, der die ganze Problematik umgeht:

Code:
INSERT INTO tabelle SET ...  ON DUPLICATE KEY UPDATE timestamp=UNIX_TIMESTAMP();
Ich finde das eine sehr praktische Sache und schätze, das kaum einer diesen Syntax kennt.

weiter Infos: http://dev.mysql.com/doc/refman/5.1/...duplicate.html
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten


Alt 08.08.2007, 07:55   #2
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User
Hab' das gerade mal getestet und muß zugeben, daß das DUPLICATE KEY UPDATE absolut brilliant ist!
Klasse Tipp
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
Rizzo ist gerade online   Mit Zitat antworten
Alt 22.09.2007, 23:25   #3
TP-Veteran
 
Benutzerbild von manuelito
 
Registriert seit: Sep 2002
Ort: Winterthur
manuelito hilft, wo's gehtmanuelito hilft, wo's gehtmanuelito hilft, wo's geht
spitzenmässig, steffen. Baue eben ein DB basiertes Sessionhandling und habe mich an diesen Tipp erinnert, kommt wie gerufen!
__________________
Metal klingt am besten, wenn man taub ist.
manuelito ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Workshops und Tutorials
[MySQL] INSERT oder UPDATE ? [Anfänger] [MySQL] INSERT oder UPDATE ?
« [Tutorial] Caching - Dynamische Seiten beschleunigen | [Workshop] Typo3-Workshop Teil I - Installation »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:10 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67