user76: Kann nichts mehr in Datenbank eintragen

Hallo,

ich habe eine Datenbank mit dem Feldern x,y,z. Auf diesen liegt ein UNIQUE Index. Zusätzlich existiert ein PRIMARY Index für ein ID Feld und Felder ohne Index. Nun habe ich in der Tabelle etwa 10000 Einträge, was auch mit der Cardinality der Indexe übereinstimmt.
Das Problem ist jetzt, dass ich keine neuen Einträge in die Tabelle hinzufügen kann. Ein Syntax Problem ist hier ausgeschlossen, auch PHPAdmin wirft mir mit der Insert Funktion ein #1062 - Duplicate entry '' for key 2 an den Kopf. Einer der Indexe wird mit den neuen Daten aber nicht berührt. Sie existieren noch nicht in der Tabelle.
Das ID Feld ist mit 14 Zeichen versehen, was also auch nicht der Grund für das Problem sein kann.

Hat jemand eine Idee hier?

Vielen Dank für Antworten!

  1. Halihallo user76

    ich habe eine Datenbank mit dem Feldern x,y,z. Auf diesen liegt ein UNIQUE Index.

    Stelle hier zunächst fest, ob sich der UNIQUE INDEX auf alle
    genannten Attribute bezieht (Multicolumn Index), oder nur auf jeweils
    eines; denn hier könnte schon der erste Fehler sein: Ein einspaltiger
    Unique Index (jeweils einer für jedes Attribut) meckert natürlich
    schon, wenn der Wert für _eine_ Spalte nicht mehr unique ist.

    Das Problem ist jetzt, dass ich keine neuen Einträge in die Tabelle hinzufügen kann. Ein Syntax Problem ist hier ausgeschlossen, auch PHPAdmin wirft mir mit der Insert Funktion ein #1062 - Duplicate entry '' for key 2 an den Kopf. Einer der Indexe wird mit den neuen Daten aber nicht berührt. Sie existieren noch nicht in der Tabelle.

    Eben: Einer der Indexe. Du hast ja mehrere und _alle_ düfen nicht
    verletzt sein.

    Zudem ist mir aufgefallen, dass der Duplicate entry '' (leer) ist,
    poste doch mal den SQL-Query, denn dies scheint mir auch suspekt.
    Da soll doch ein Wert rein, oder nicht?

    Viele Grüsse

    Philipp

    1. Dank für die flotte Antwort.

      Hier mal der SQL-Befehl:
      INSERT INTO datenbank (x) VALUES ('0422005')

      Auf x liegt wie gesagt ein UNIQUE INDEX, 0422005 ist aber nocht nicht in der Tabelle.

      Die UNIQUE Indexes beziehen sich jeweil nur auf eine Spalte. Hier sollte also nur das Feld x relevant sein, in dem sich ja wie gesagt 0422005 noch nicht befindet.

      Gruß
      user76

      1. Hallo

        Dank für die flotte Antwort.

        Hier mal der SQL-Befehl:
        INSERT INTO datenbank (x) VALUES ('0422005')

        Lies bitte Philipps Antwort nochmals genau durch.
        Du schreibst nichts in die Spalten y und z und hast bestimmt das gleiche schon einmal getan ...

        Auf x liegt wie gesagt ein UNIQUE INDEX, 0422005 ist aber nocht nicht in der Tabelle.

        Du hast somit UNIQUE auf jeder einzelnen Spalte...

        Die UNIQUE Indexes beziehen sich jeweil nur auf eine Spalte. Hier sollte also nur das Feld x relevant sein, in dem sich ja wie gesagt 0422005 noch nicht befindet.

        x geht ja nicht schief, sondern y (oder z). Da hast Du schon einmal auf das Eintragen eines Wertes verzichtet. Somit hast Du dort Deinen Default-Wert '', denn NULL ist bei UNIQUE-Key meines Wissens nicht erlaubt.

        Wie Philipp schreibt: In jeder einzelnen Spalte muss die UNIQUE-Bedingung erfüllt sein.

        Gruss,

        Vinzenz

        1. yo,

          .... denn NULL ist bei UNIQUE-Key meines Wissens nicht erlaubt.

          doch unique erlaubt auch NULL werte, aber eben nur einen. ein Primary key erlaubt keinen NULL wert, weil dieses zusätzlich die eigenschaft NOT NULL besitzt, sprich NOT NULL + UNIQUE = PRIMARY KEY.

          Ilja

          1. Halihallo Ilja

            .... denn NULL ist bei UNIQUE-Key meines Wissens nicht erlaubt.
            doch unique erlaubt auch NULL werte, aber eben nur einen. ein Primary key erlaubt keinen NULL wert, weil dieses zusätzlich die eigenschaft NOT NULL besitzt, sprich NOT NULL + UNIQUE = PRIMARY KEY.

            Um noch etwas genauer zu sein:

            PRIMARY KEY = NOT NULL + UNIQUE + "als Primary Key definiert", nicht
            anders rum. Die Implikation läuft in dieser Richtung :-)
            Aber der Sinn ist natürlich richtig.

            Der Vollständigkeitshalber: NULL Werte sind beim Foreignkey im
            Gegensatz zum Primary Key erlaubt.

            Viele Grüsse

            Philipp

            1. Halihallo Ilja

              Um noch etwas genauer zu sein:

              Herrgott bin ich ein Klugscheisser, aber echt ;)
              Sorry Ilja, war ja nicht als Kritik zu verstehen sondern als
              (überflüssige) Erweiterung.

              Viele Grüsse

              Philipp

  2. Hello,

    Das Problem ist jetzt, dass ich keine neuen Einträge in die Tabelle hinzufügen kann. Ein Syntax Problem ist hier ausgeschlossen, auch PHPAdmin wirft mir mit der Insert Funktion ein #1062 - Duplicate entry '' for key 2 an den Kopf. Einer der Indexe wird mit den neuen Daten aber nicht berührt. Sie existieren noch nicht in der Tabelle.

    Das deutet darauf hin, dass Du "einen der neuen Indexe" in der Weise benutzt hast, dass im Feld kein Wert stand. Die Spalte scheint aber NULL-Werte zuzulassen. Allerdings sind aufgrund er UNIQUE-Anweisung für den Index nur genau ein NULL-Wert erlaubt. Jeder weitere Eintragungsversuch ohne eineindeutigen Wert im feld muss also scheitern.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen