jochen: datensatz einfuegen, aber nur wenn noch nicht vorhanden

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

  1. 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 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?

    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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
  2. 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

    --
    -------------------
    When the only tool you've got is a hammer, all problems start to look like nails.
    1. 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

  3. 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.