Rick: unterschied zwischen not Null und null

hallo,

was ist der unterschied zwischen not null und null.
ich habe mir zwar schon die mysql dokumentation angeschaut, bin aber nicht schlau daraus geworden.
warum sollte man eher not null als null benutzen.

könnte mir das jemand freundlicher weise erklären?

danke im voraus.

  1. Hi,

    du schreibsts in eine Datenbank. Dabei gibt es Felder, die in selbiger nicht leer bleiben dürfen (Not Null) und einige, die ausgelassen werden können (Null).
    Wie und welche Felder befüllt werden müssen, legst du beim Designen der DB fest.

    MfG
    Dark Sider

    1. Hi,

      du schreibsts in eine Datenbank. Dabei gibt es Felder, die in selbiger nicht leer bleiben dürfen (Not Null) und einige, die ausgelassen werden können (Null).

      das heisst, wenn ich eine spalte habe wo die strasse reinkommt muss NOT NULL heissen und wenn ich noch eine spalte "zweite anschrift" habe die optional ist muss sie NULL sein.

      1. Moin!

        das heisst, wenn ich eine spalte habe wo die strasse reinkommt muss NOT NULL heissen und wenn ich noch eine spalte "zweite anschrift" habe die optional ist muss sie NULL sein.

        Nein. Von "müssen" kann überhaupt keine Rede sein. Siehe meine Antwort: [pref:t=59906&m=336773]

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. ok, danke erstmal.

          ich lass mir des mal durch den kopf gehen.
          ein bisschen habe ich es jetzt kappiert.

          vielen dank dass ihr mir geholfen habt.

  2. Hallo,

    Wenn eine Spalte das Attribut 'null' hat, dürfen Einträge mit dem Wert null existieren, hat die Spalte das Attribut 'not null' darf kein Eintrag mit dem Wert null existieren. Ob man 'not null' oder 'null' verwendet hängt von den Anforderungen an die Spalte ab.
    z.B. würde man 'not null' für eine Spalte, die den Nachnamen enthalten soll verwenden (ein Wert ist zwingend erforderlich, aber auch immer vorhanden)und 'not null' für die Telefonnummer (nicht zwingend erforderlich, da nicht immer vorhanden
    )
    Gruß,
    Henning

  3. Hi,

    ich gehe davon aus, du meinst, ob man eine Spalte als NOT NULL deklarieren sollte oder nicht.
    Wenn eine Spalte als NOT NULL deklariert ist, dann MUSS sie mit einem Wert befüllt sein, das ist z.B. bei Schlüsseln unbedingt notwendig, man will ja schließlich die Beziehungen abbilden, welchen Sinn macht da eine leere Eingabe.
    NOT NULL beschreibt somit eine Möglichkeit, in der Datenbank Pflichtfelder zu deklarieren, d.h. solltest du in einem Skript einmal vergessen auf einen bestimmten Wert zu prüfen, dann wird dich deine Datenbank dran erinnern, dass der fehlt.
    Ob das Performance-Vorteile bringt kann ich allerdings nicht sagen, auch nichts über sonstige Vor- oder Nachteile.

    MfG
    Rouven

    --

    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
  4. Hallo,

    was ist der unterschied zwischen not null und null.

    NULL (gesprochen 'Nall') hat bei Datenbanken, und nicht nur dort, die Bedeutung von Nix, Nada, niente, 'einfach nix da, nicht einmal 0(null, zero) oder ein Leerstring'[1], also das Fehlen jeglichen Wertes. In vielen datenbanken ist der Datentyp von NULL auch undefiniert, ist also kein String oder Datum oder Zahl.

    Bei der Tbaellendefinition bedeutet das 'NOT NULL' für ein Feld, dass in dieses Feld bei jedem Datensatz unbedingt mit einem Wert ausgefüllt sein muß. Dann ist Feld ungefähr so etwas wie ein Mußfeld.

    Grüße
      Klaus

    [1] zu beachten ist aber, dass einige Datenbanken wie z.B. Oracle einen Leerstring mit NULL gleichsetzen.

  5. Moin!

    warum sollte man eher not null als null benutzen.

    Die Mysql-Doku sagt dazu:
    "Deklarieren Sie Spalten - falls möglich - als NOT NULL. Das macht alles schneller und Sie sparen ein Bit pro Spalte. Beachten Sie, dass, wenn Sie wirklich NULL in Ihrer Applikation benötigen, Sie dieses natürlich benutzen sollten. Vermeiden Sie nur, einfach alle Spalten vorgabemäßig auf NULL zu haben."

    Mit anderen Worten: Wenn deine Applikation es benötigt, dass die Datenbank zwischen "ist nichts gespeichert (= NULL)" und "Leerstring bzw. Nullwert gespeichert" unterscheiden muß, dann benutze "NULL". Dann mußt du das bei irgendeiner Abfrage aber auch tatsächlich wissen wollen.

    Meistens benötigt man NULL-Spalten nämlich nicht. MySQL zwingt dich nicht, NOT NULL-Spalten mit Werten zu versehen. Wenn du keinen angibst, wird der Default-Wert, der beim Erstellen der Tabelle festgelegt wurde, eingetragen. Das ist üblicherweise eben ein Leerstring oder die Zahl 0.

    Es wurde das Beispiel "Telefonnummer hat nicht jeder" angesprochen. Dafür braucht man keine NULL-Spalte. Ein Leerstring zeigt ebenso deutlich, dass keine Telefonnummer gespeichert ist.

    Anders, wenn du z.B. Meßwerte speicherst. Wenn zu einer Messung aus irgendwelchen Gründen kein Wert verfügbar ist, muß das irgendwie dokumentiert werden. Es ist blödsinnig, den Wert 0 einzutragen, wenn dieser Wert auch als regulärer Meßwert vorkommen kann. Und es ist ebenso unsinnig, irgendeinen anderen Wert einzutragen. Erinnere dich einfach an die ganzen Jahr-2000-Probleme. Programmierer neigten dazu, "typische" Werte als "Nichts vorhanden"-Werte zu verwenden. Also beispielsweise das Datum "9.9.99" als "Kein Datum". Das war 1980 kein Problem - das wurde erst zum Problem.

    Deshalb kannst du mit einer NULL-Spalte so auf elegante Weise nicht nur Meßwerte, sondern auch "kein Meßwert" in die DB eintragen - und diese kollidieren dann nicht miteinander.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hi,

      warum sollte man eher not null als null benutzen.

      Die Mysql-Doku sagt dazu:
      "Deklarieren Sie Spalten - falls möglich - als NOT NULL. Das macht alles schneller und Sie sparen ein Bit pro Spalte. Beachten Sie, dass, wenn Sie wirklich NULL in Ihrer Applikation benötigen, Sie dieses natürlich benutzen sollten. Vermeiden Sie nur, einfach alle Spalten vorgabemäßig auf NULL zu haben."

      Mit anderen Worten: Wenn deine Applikation es benötigt, dass die Datenbank zwischen "ist nichts gespeichert (= NULL)" und "Leerstring bzw. Nullwert gespeichert" unterscheiden muß, dann benutze "NULL". Dann mußt du das bei irgendeiner Abfrage aber auch tatsächlich wissen wollen.

      nicht unbedingt, sage ich da als Datenbankdesigner. Die Abfrage, "bei der man es wissen wollte" muss ja noch nicht geschrieben bzw. geplant worden sein.

      Ich moechte allerdings mal darauf hinweisen, dass NULL und '' etwas grundsaetzlich anderes abbilden. Einerseits NULL die nichterfasste Information und '' der String der Laenge 0, also beispielsweise ein nicht vorhandener akademischer Titel, was ja wiederum Information transportiert.

      Das oft gehoerte Geschwaetz, dass Datenfelder praeferiert als nicht nullable deklariert werden sollten, klingt fuer mich etwas hohl. Argumentiert wird da oft mit der vermeidbaren Komplexitaet, die Datenbankabfragedesignern die Arbeit erleichtern soll. - Aber ich zweifle an der Werthaltigkeit dieses Arguments in diesem Fall ernsthaft. (Womit ich mich allerdings keinesfalls pauschal gegen das Vermeiden von Komplexitaet ausgesprochen habe.)

      GRuss,
      Lude