Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > [MySQL] Was macht INSERT IGNORE/INSERT DELAYED, Anwendungsbeispiele
Antwort
 
Themen-Optionen
Alt 05.02.2007, 16:10   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard [MySQL] Was macht INSERT IGNORE/INSERT DELAYED, Anwendungsbeispiele

Hi,
ich habe hier gerade nicht die Möglichkeit nachzuprüfen, aber mich würde interessieren was die Anweisung INSERT IGNORE im vergleich zu einem einfachen INSERT macht!?

Hier steht
Zitat:
Sie können REPLACE anstelle von INSERT verwenden, um alte Datensätze zu überschreiben. REPLACE ist das Gegenstück zu INSERT IGNORE bei der Behandlung neuer Datensätze, deren eindeutige Schlüsselwerte Dubletten bereits vorhandener Datensätze sind: Die neuen Datensätze ersetzen die alten, statt verworfen zu werden.
Kurz:

Was ist los?

Weiterhin steht hier
Zitat:
Wenn das Schlüsselwort IGNORE in einem INSERT Statement mit vielen Reihen angegeben wird, werden alle Reihen ignoriert, die einen existerenden PRIMARY oder UNIQUE Schlüsseleintrag enthalten. Wenn IGNORE nicht angegeben wird, bricht der INSERT genau dann ab, wenn dort eine Reihe ist, die einen Schlüsselwert gerade dupliziert.
Hm, heißt das, dass der PRIMARY_KEY sozusagen "überschrieben" wird?

Bin etwas verwirrt..
Danke für Eure Hilfe.

Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 16:16   Nach oben    #2
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.710
Standard

Zitat:
Wenn das Schlüsselwort IGNORE in einem INSERT Statement mit vielen Reihen angegeben wird, werden alle Reihen ignoriert, die einen existerenden PRIMARY oder UNIQUE Schlüsseleintrag enthalten.
Sprich wenn ein doppelter Eintrag eingefügt werden würde, wird diese Anweisung ignoriert und es wird die nächste ausgeführt
Zitat:
Wenn IGNORE nicht angegeben wird, bricht der INSERT genau dann ab, wenn dort eine Reihe ist, die einen Schlüsselwert gerade dupliziert.
Deine Anweisungen werden nicht durchgeführt...

Vorteil von IGNORE ist die Möglichkeit, 2 identische Datenbanken mit differierenden Beständen zu mergen ohne das es knallt.

Replace ersetzt einfach während INSERT IGNORE doppelte Einträge vermeidet ohne durch eine Fehlermeldung das Skript zu beenden.
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 16:51   Nach oben    #3
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Okay, gut. Das reicht mir erstmal.

Dann hänge ich noch hinten dran.
Hast du eventuell auch ein Beispiel für die Anwendung von INSERT DELAYED?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 17:12   Nach oben    #4
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.710
Standard

Also benutzt habe ich delayed noch nicht, aber soweit ich die Doku bzw mein Wissen noch korrekt zusammenbekomme muss man ja bei normalen Inserts/Updates warten bis die DB den Befehl verarbeitet hat.
Wenn man nun DELAYED benutzt, schluckt er den Befehl und lässt dich, also den Client weiterarbeiten.
Nachteil ist das du nicht sofort mitbekommst, ob alles geklappt hat und das (siehe Doku) die DB mehr Leistung frisst.
Ein INSERT DELAYED mit anschließendem mysql_error() ist daher also nicht möglich, da du keine wirkliche Antwort bekommst.

Vorteil ist (siehe Doku) natürlich das du schneller Arbeiten kannst. Das ist gut für Loggings in der DB z.B.

Doku: http://dev.mysql.com/doc/refman/5.1/...t-delayed.html (haste sicher schon )
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 17:35   Nach oben    #5
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Toll. Das steht da .. aber das ist für mich irgendwie kein greifbares Beispiel.
Inwiefern ist das bei Loggings sinnvoll? Doch nur, wenn man massig viele Zugriffe in kürzester Zeit hat, oder?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 17:45   Nach oben    #6
$traight-$hoota
Erfahrener Benutzer
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 497
Standard

wenn man nen haufen ereignisse hat, die ins log eingetragen werden müssen, kann man die entsprechenden queries ans dbms senden und braucht nicht zu warten, bis das query ausgeführt wurde, sondern das programm läuft einfach weiter und es gibt keine rückmeldung ("wird schon geklappt haben"). dadurch ist das ganze halt schneller als wenn man auf die abarbeitung jedes queries warten würde...
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 17:53   Nach oben    #7
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Achso. Ich habe da was falsch verstanden.
Die einzelne Abfrage dauert mit INSERT DELAYED etwas länger, aber im Endeffekt ist es schneller, als wenn ich mit INSERT die Log-Einträge abspeichern würde.

So ist richtig, oder?

Andere Anwendungsbeispiele, als das Logging?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.02.2007, 18:23   Nach oben    #8
WarrenFaith
Mensch
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.710
Standard

Zitat:
Die einzelne Abfrage dauert mit INSERT DELAYED etwas länger, aber im Endeffekt ist es schneller, als wenn ich mit INSERT die Log-Einträge abspeichern würde.
Richtig! Du haust also alles in den "Buffer" und die DB schreibt so schnell es geht mit... Baust ne Art Stack auf.

Ne andere Anwendung wüsste ich jetzt nicht, da man normalerweise nicht so schnell Daten schreiben muss und zeitgleich so "gleichgültig" mit dem Erfolg des Schreibvorgangs umgehen kann.

Es ist definitiv nicht anzuraten bei Einfügen sensibler und wichtiger Daten. Also nicht beim Import von Backups z.B.

Sorry ansonsten fällt mir nix ein...

//edit:
Auf Suche gewesen und nur ein weiteres Beispiel gefunden:
Wenn man größe Datenbestände bearbeiten will die halt Zeit brauchen, wie ein Update über die komplette Tabelle oder ein Delete ... ( http://lists.phpbar.de/archive/mysql-de1/msg01920.html )
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


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

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 are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MYSQL] Insert wird nicht sofort ausgeführt pen2010 Datenbanken 6 07.08.2007 23:02
[MySQL] INSERT mit Wert aus einer Liste... WarrenFaith Datenbanken 6 16.05.2007 16:58
PRoblem mit Cookie bei PHPbb-Board Julied64 PHP-Programmierung 2 12.12.2005 15:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:38 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

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