UNIQUE - zuweisen, außer leere Felder

knallbernd

Erfahrenes Mitglied
Hallo!

Ich erstelle mittels
PHP:
$sql="ALTER TABLE tabelle ADD $y varchar(150) NOT NULL ";

eine neue Spalte in meiner Tabelle. Wie schaff ich es jetzt mittels PHP die Spalte UNIQUE zu machen (also nicht über phpmyadmin) bzw. leere Felder vom UNIQUE auszunehmen?
Bin für Hilfe sehr dankbar!
 
SQL:
ALTER TABLE tabelle ADD UNIQUE ( `$y` );

Den zweiten Teil verstehe ich spontan nicht?
 
t leider nicht, hat ich schon probiert :-/.

PHP:
$sql="ALTER TABLE kurse ADD UNIQUE ( `$y` ) varchar(150) NOT NULL ";
mysql_query($sql);

Die zweite Frage war dahingehend, dass sich das UNIQUE ja auch auf leere Felder bezieht - soll heißen wenn ich mehrere leere Felder habe (was bei meiner DB-Struktur leider vorkommt), dann sollen diese vom UNIQUE-Constraint ausgeschlossen sein.
Geht das?
 
Das ADD UNIQUE muss ein eigenständiges Query sein, soweit ich weiß.

Beim zweiten habe ich leider keine Idee zu, es sei denn eben vorher mit einem weiteren Query zu checken ob es leer ist.

Aber ich bin sicher, hier kommt gleich noch einer vorbei, der das erklären/zeigen kann ;)
 
Hallo,

man kann durchaus eine neue Spalte und gleichzeitig ein Unique-Constraint (und damit einen Index) anlegen:

SQL:
ALTER TABLE xyz ADD newcol VARCHAR(150) UNIQUE;

Oder aber mit zwei Statements:

SQL:
ALTER TABLE xyz ADD new VARCHAR(150);

ALTER TABLE xyz ADD CONSTRAINT uk_newcol UNIQUE (newcol);

Zu deiner zweiten Frage:

mir ist nicht bekannt, dass man es in MySQL explizit ausschalten kann, dass NULL-Werte nicht berücksichtigt werden. Was auf jeden Fall passieren kann, ist, je
nach Speicher-Engine, dass das Unique-Constraint abgelehnt wird, da die Spalte nur Nicht-NULL-Werte beinhalten darf.

In Oracle gibt es für diesen Fall z.B. die Möglichkeit einen "Function Based Index". Dem kann man dann u.a. mitteilen, dass er nur Spaltenwerte verschiedenen NULL indizieren soll, was sich bei sehr grossen Tabellen mit Spalten, die sehr viele NULL-Werte besitzen, aber trotzdem sinnvoll indiziert werden sollen, positiv bemerkbar macht..

hoffe es hilft,

Markus
 
Das Problem ist halt wenn ich die Spalte erzeuge hab ich schon 4 leere Einträge.
Wenn ich's so mache:
PHP:
$sql="ALTER TABLE kurse ADD $y VARCHAR (150) UNIQUE ";
mysql_query($sql);
Hab ich überall die NULL-Einträge in der DB und kann nicht drüberschreiben.
So allerdings:
PHP:
$sql="ALTER TABLE kurse ADD $y VARCHAR (150) NOT NULL UNIQUE ";
mysql_query($sql);
wird gar keine Spalte angelegt. Ich denk mal aus obiger Problematik da ja dann bereits 4 leere Felder erzeugt werden, also nicht mehr UNIQUE sind.
Hmm...
 
Zurück