Ich habe eine Tabelle mit mehreren Spalten, die den Primärschlüssel bilden. Die Art der gespeicherten Daten ermöglicht, dass einige dieser Felder NULL
Werte haben. Ich habe meine Tabelle als solche entworfen:NULL-Wert im mehrspaltigen Primärschlüssel
CREATE TABLE `test` (
`Field1` SMALLINT(5) UNSIGNED NOT NULL,
`Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`Field1`, `Field2`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
Allerdings, wenn ich describe test
laufen sie zeigt, wie folgt aus:
|| *Field* || *Type* || *Null* || *Key* || *Default* || *Extra*
|| Field1 || smallint(5) unsigned || NO || PRI || ||
|| Field2 || decimal(5,2) unsigned || NO || PRI || 0.00 ||
Und ich immer einen Fehler bekommen, wenn ein NULL
Wert einfügen.
Spalte ‚Field2‘ kann nicht
Ist dies null sein, weil ein Feld, das Teil eines Primärschlüssels ist nicht null sein kann? Was sind meine Alternativen neben der Verwendung von "0" für NULL
?
Dank Link des vj Schah, macht @Tomalak den [ausgezeichneten Punkt] (http://stackoverflow.com/a/386061/673991), dass diese Einschränkung aus dem Grunde SQL folgt Grundsatz, dass, da die Teile eines PRIMARY-Schlüssels von jeder Zeile mit jeder anderen Zeile verglichen werden müssen und "** NULL nicht Teil eines Vergleichs sein kann - das Ergebnis eines solchen Vergleichs immer NULL **" wäre, was die Durchsetzung der PRIMÄREN Schlüsseleindeutigkeit erfordert Nicht-Null-Spalten. –