Primary Key NOT NULL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Primary Key NOT NULL

    Hi Zusammen,

    quäle mich durch eine MySQL Datenbank Version 5.0.20 aus dem XAMPP Paket.

    Problem: Der Primary Key einer Tabelle ist NOT NULL, dennoch kann ich Daten einfügen ohne einen Wer für den Key:

    PHP-Code:
    CREATE TABLE Kunden (
      
    KundenNr VARCHAR(7NOT NULL,
      
    KName VARCHAR(255NOT NULL,
      
    PRIMARY KEY(KundenNr)
    )
    TYPE=InnoDB
    Wie löse ich es, daß man für die Kundennummer einen Wert eingeben muss?


    Gruß Sed

  • #2
    Muß man doch jetzt schon: NULL darfs nicht sein, AUTO_INCREMENT isses nich und einen DEFAULT-Wert hats auch nicht (default und primary passt auch nicht zusammen, da primary immer unique ...).

    Kommentar


    • #3
      Ja, von der Theorie her muss man einen Wert eingeben.

      In der Praxis muss man es aber nicht, die DB aktzeptiert einen Eintrag ohne Wert.

      That's the problem

      Kommentar


      • #4
        Welche KundenNr. wird denn von dieser Query erzeugt?

        INSERT INTO Kunden ('KName') VALUES ('Mr. Foo')

        Kommentar


        • #5
          Ergebnis:
          PHP-Code:
          #1064 - You have an error in your SQL syntax; 
          check the manual that corresponds to your MySQL 
          server version 
          for the right syntax to use near ''KName') 
          VALUES ('
          MrFoo')' at line 1 
          Habs angepasst:
          INSERT INTO Kunden (KName) VALUES ('Mr. Foo')

          Ergebnis:
          PHP-Code:
          Eingefügte Zeilen(die Abfrage dauerte 0.0293 sek)
          SQL-BefehlINSERT INTO KundenKName )
          VALUES (
          'Mr. Foo'

          Kommentar


          • #6
            Sorry, das sollten Backticks sein um KName.

            Ich hab eben ausprobiert und du hast recht. MySQL fügt einen leeren String als DEFAULT ein, auch wenn man gar kein DEFAULT angegeben hat. Bei INT-Spalten wird automatisch eine 0 eingesetzt ... wahrscheinlich bei allen Spaltentypen das untere Ende des Wertebereichs, wenn die Spalte NOT NULL ist.

            Wahrscheinlich ist dieses Verhalten irgendwo im Manual dokumentiert, aber man sollte es nicht (aus)nutzen.

            Denn obiges INSERT funktioniert natürlich nur einmal, beim zweiten Mal will MySQL wieder einen leeren String einfügen und scheitert an der Uniqueness des Primary Keys.

            Mußt also mit PHP prüfen, ob eine KundenNr. angegeben wurde.
            (Es wäre ein sehr dreckiger Hack, einfach Mr. Foo mit leerer KundenNr. drin zu lassen, damit ab jetzt immer eine KundenNr. angegeben werden muß.)

            Kommentar


            • #7
              Kann man diese Prüfung nicht auch in der Datenbank mit einem Constraint bewirken?

              Hatte vor einem Jahr mal bei einer Weiterbildung einen allgemeinen SQL Teil, erinnere mich daran das da was mit Constraints war.
              Ob es nun bei Mysql oder MSSQL war weiss ich nicht mehr. Im Netz finde ich nur Infos zu Constraints im Zusammenhang mit Foreign Keys.

              Kommentar


              • #8
                Die Lösung: Strict-Mode (http://dev.mysql.com/doc/refman/5.0/...-sql-mode.html)

                Kommentar


                • #9
                  Super! Ich danke Dir, das haut nun hin. Variable in die my.cnf geschrieben und es funktioniert.......halbwegs.

                  Wenn man einen Eintrag macht der die Spalte nicht einträgt haut es hin und ich bekomme eine Fehlermeldung, daß es keinen default Wert gibt. Das ist ja auch richtig so.
                  Aber:

                  Trage ich per PHPmyadmin einfach nur einen Kundennamen ein und lasse das Feld der Id leer lasse trägt er es wie vorher ein als leeres Feld.

                  Bekommen wir das auch noch in den Griff?

                  Als Endanwendung für die Eingabe soll kein PHP dienen sondern es werden per Skript .csv Dateien reingeschrieben. Und da befürchte ich kann es vorkommen wenn jemand für einen Rechner die Kundennummer nicht weiss lässt er das Feld leer und lässt es nicht einfach weg.

                  Kommentar


                  • #10
                    Ich würde mir einfach mal überlegen ob es eventuell einen Unterschied geben könnte zwischen NULL und einem Leerstring ... !
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      Das ist schon richtig, daß NULL und leer nicht das gleiche ist.
                      Ich hoffte nur, daß ein "nichts" mit NULL abgedeckt ist, denn "nichts" bzw. leer ist ja kein Zeichen das man abfragen kann.

                      Oder vielleicht doch?

                      Kommentar

                      Lädt...
                      X