Hähnchen: Datenbankabfrage

Guten Tag an alle,

ich haben ein Problem mit einer Datenbankabfrage in mySql (MySQL-Client-Version: 5.0.51a; am Beispiel phpmyAdmin)

Und zwar habe ich einen Unique-Key über mehrere Attribute, die teilweise auch NULL sein können.
Trotzdessen kann ich doppelte Elemente in die Datenbank schreiben.

Beispiel:

Ich habe Spalten A,B,C,D,E über die ich einen Unuque-Key definiert habe.
In diesem Fall wäre A und einer der andren Spalten B oder C oder D oder E nicht NULL, z.B.(1,1,NULL,NULL,NULL).
Trotz des Unique-Keys kann ich wieder ein Objekt mit (1,1,NULL,NULL,NULL) abspeichern, was eigentlich nicht möglich sein sollte.

Wer mein Problem kennt oder weiß was ich falsch mache, schreibt mir doch bitte ein Lösung in das Forum und schon mal danke im Vorraus.

  1. Hi,

    Ich habe Spalten A,B,C,D,E über die ich einen Unuque-Key definiert habe.
    In diesem Fall wäre A und einer der andren Spalten B oder C oder D oder E nicht NULL, z.B.(1,1,NULL,NULL,NULL).
    Trotz des Unique-Keys kann ich wieder ein Objekt mit (1,1,NULL,NULL,NULL) abspeichern, was eigentlich nicht möglich sein sollte.

    aus http://dev.mysql.com/doc/refman/5.1/de/create-table.html:

    Ein eindeutiger Index ist dahingehend eingeschränkt, dass alle Werte im Index eindeutig sein müssen. Wenn Sie einen neuen Datensatz mit einem Schlüssel hinzufügen, der dem eines vorhandenen Datensatzes entspricht, tritt ein Fehler auf. Eine Ausnahme hierzu besteht darin, dass, wenn eine Spalte im Index NULL-Werte enthalten darf, diese mehrere NULL-Werte enthalten kann. Diese Ausnahme gilt jedoch nicht für BDB-Tabellen, bei denen eine Spalte mit einem eindeutigen Index NULL nur einmalig gestattet.

    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. echo $begrüßung;

      ich haben ein Problem mit einer Datenbankabfrage in mySql (MySQL-Client-Version: 5.0.51a; am Beispiel phpmyAdmin)

      Die Server-Version ist ausschlaggebend, nicht die des Clients. Beide können übereinstimmen, wenn sie aus den selben Quellen erstellt wurden, müssen das aber nicht.

      aus http://dev.mysql.com/doc/refman/5.1/de/create-table.html:

      Ein eindeutiger Index ist dahingehend eingeschränkt, dass alle Werte im Index eindeutig sein müssen. Wenn Sie einen neuen Datensatz mit einem Schlüssel hinzufügen, der dem eines vorhandenen Datensatzes entspricht, tritt ein Fehler auf. Eine Ausnahme hierzu besteht darin, dass, wenn eine Spalte im Index NULL-Werte enthalten darf, diese mehrere NULL-Werte enthalten kann. Diese Ausnahme gilt jedoch nicht für BDB-Tabellen, bei denen eine Spalte mit einem eindeutigen Index NULL nur einmalig gestattet.

      Der Abschnitt liest sich etwas holprig am Ende und unterschiedet sich auch im Stil und Inhalt von dem im englischen Handbuch, das seit der Übersetzung ins deutsche diverse Veränderungen durchgemacht hat, die sich in der Übersetzung nicht widerspiegeln. (Das sieht man auch sehr schön an der Nummerierung und Aufteilung der Kapitel.)

      A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.

      Ein NULL steht für "kein bestimmter Wert". Ein Vergleich mit NULL ergibt immer NULL, auch wenn man zwei NULLs miteinander vergleicht. NULL wird im booleschen Kontext auch nicht als wahr angesehen. Somit ist "foo,NULL" = "foo,NULL" gleich NULL und damit nicht wahr, und also auch nicht gleich.

      echo "$verabschiedung $name";