datensatz einfuegen, aber nur wenn noch nicht vorhanden
jochen
- datenbank
hallo forum,
ich moechte in eine tabelle einen datensatz einfuegen 'date' und 'ip', aber nur wenn ip noch nicht in einem daten satz in der spalte 'ip' existiert.
kann man im query
insert into table
(date
,ip
) values ('0','0.0.0.0');
irgendwo ne if-anweisung oder so oder nen subquery unterbringen, welche prueft ob die ip schon in der tabelle ist?
mfg jochen
Hi,
ich moechte in eine tabelle einen datensatz einfuegen 'date' und 'ip', aber nur wenn ip noch nicht in einem daten satz in der spalte 'ip' existiert.
das bedeutet offensichtlich, die Spalte 'ip' benötigt ein Unique-Constraint. Hat sie ein solches? Wenn ja, warum nicht?
kann man im query
insert intotable
(date
,ip
) values ('0','0.0.0.0');
irgendwo ne if-anweisung oder so oder nen subquery unterbringen, welche prueft ob die ip schon in der tabelle ist?
Nein. "INSERT INTO" fügt in die Tabelle ein, sofern dies möglich ist. Die Unmöglichkeit kannst Du in der umgebenden Programmlogik feststellen, indem Du den Fehlerfall abfängst.
Cheatah
Hallo Cheatah.
ich moechte in eine tabelle einen datensatz einfuegen 'date' und 'ip', aber nur wenn ip noch nicht in einem daten satz in der spalte 'ip' existiert.
das bedeutet offensichtlich, die Spalte 'ip' benötigt ein Unique-Constraint. Hat sie ein solches? Wenn ja, warum nicht?
Hm. Hm?
Einen schönen Sonntag noch.
Gruß, Mathias
Hello,
neben dem UNIQUE-Constraint bietet MySQL an, im Fall eines INSERT-Konflikts automatisch ein UPDATE an dessen Stelle auszuführen, siehe INSERT-ON-DUPLICATE
MfG
Rouven
neben dem UNIQUE-Constraint bietet MySQL an, im Fall eines INSERT-Konflikts automatisch ein UPDATE an dessen Stelle auszuführen, siehe INSERT-ON-DUPLICATE
Das ist aber MySQL-spezifisch, nicht portabel, und sieht auf den ersten Blick sehr nach einem krampfhaften Versuch aus, eine Spalte mit einer eindeutigen ID zu vermeiden.
Der Fragesteller zwar die Buchstaben M, Y, S, Q, und L benutzt, aber nicht in einem Block hintereinander. ;-)
Alexander
ich moechte in eine tabelle einen datensatz einfuegen 'date' und 'ip', aber nur wenn ip noch nicht in einem daten satz in der spalte 'ip' existiert.
Wenn Du statt zwei Abfragen unbedingt eine nutzen willst, dann böte sich unter MySQL REPLACE an:
http://dev.mysql.com/doc/refman/5.1/de/replace.html
Du solltest dann natürlich ip eindeutig anlegen, also bspw. als Primärschlüssel.