Andrea_s: Trotz -ON DUPLICATE KEY- wird immer neues feld erzeugt

Hallo,

ich würde gerne eine eigene Seitenstatistik erstellen. Dazu möchte ich den Wert in der MYSQL Datenbank immer um einen Wert erhöhen.

INSERT INTO seitenzugriff SET datum='2020-10-11',zaehler=1
ON DUPLICATE KEY UPDATE zahler = zaehler + 1

Laut MYSQL Refernez sollte das funktionieren, doch wird mir für jedes mal, anstatt das der Wert erhöht wird, ein neues Datumsfeld erstellt.

Andreas

  1. Hallo Andreas,

    damit das funktioniert, muss es zu einer DUPLICATE KEY Bedingung kommen. Dafür muss das Datum der Primärschlüssel der Tabelle sein. Ist das der Fall?

    Edit: Der folgende Teil ist Blödsinn!

    Sodann muss das UPDATE-Statement im ON DUPLICATE KEY Teil valide sein. Das ist es nicht. Es sollte lauten:

    UPDATE seitenzugriff SET zaehler=zaehler+1 WHERE datum='2020-10-11'
    

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Dafür muss das Datum der Primärschlüssel der Tabelle sein. Ist das der Fall?

      Nein, das war der Fehler!

      INSERT INTO seitenzugriff SET datum=CURDATE(),zaehler=1
      ON DUPLICATE KEY UPDATE zaehler = zaehler + 1
      

      Jetzt funktioniert es, ich habe nun noch das Datum, CURDATE() geändert.


      Meinst du, das ist nicht valide?

      UPDATE zaehler = zaehler + 1

      und ich sollte es in etwa so abändern?

      UPDATE seitenzugriff SET zaehler=zaehler+1 WHERE datum='2020-10-11'

      1. Hallo Andrea_s,

        ich sehe mich korrigiert. MySQL ist nicht meine Standard-DB, und ich hatte da etwas falsch im Kopf.

        Dein Statement ist richtig, meins falsch.

        Rolf

        --
        sumpsi - posui - obstruxi
    2. Hallo

      damit das funktioniert, muss es zu einer DUPLICATE KEY Bedingung kommen. Dafür muss das Datum der Primärschlüssel der Tabelle sein. Ist das der Fall?

      Bist du sicher, dass das Vergleichsfeld ein Primärschlüssel sein muss? Mir was so, als würde es reichen, dass gegen einen Schlüssel geprüft wird, der unique ist.

      *rumsuch kram tast* Ah, da haben wir's ja.

      If you specify an ON DUPLICATE KEY UPDATE clause and a row to be inserted would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row occurs.

      Hervorhebung von mir.

      Der Schlüssel muss also eindeutig sein. Es kann sich im übrigen auch um einen eindeutigen Schlüssel, der aus mehreren Feldern zusammengesetzt ist, handeln.

      Tschö, Auge

      --
      Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
      Hohle Köpfe von Terry Pratchett