phpbar.de logo

Mailinglisten-Archive

[dbs] MySQL und UNIQUE

[dbs] MySQL und UNIQUE

Friederun Göllner goellner at macnews.de
Sam Mar 6 07:14:39 CET 2004


Hallo,

habe gestern Stunden versucht, etwas brauchbares ueber den key UNIQUE 
in MySQL zu finden und komme da leider nicht weiter.

Ziel ist eine Spalte zu definieren, deren Werte nur einmal vorkommen 
duerfen, sie sollten aber nicht per auto_increment vergeben werden 
sondern manuell eingetragen werden.

Genau das scheine ich laut Infos mit dem key UNIQUE erreichen zu 
koennen. In der Praxis entstand aber nur ein Wust von Fragen.

Angelegt habe ich die Spalte nachtraeglich. So ist fuer jeden 
Datensatz also erstmal der Wert NULL in dieser Spalte eingetragen 
worden. Das ist so erstmal in Ordnung - widerspricht nur voellig der 
Annahme, dass diese Spalte keine identischen Werte haben soll??!

Wenn ich die Tabelle mit DESCRIBE im Terminal betrachte, erhalte ich 
fuer meine neue Spalte folgenden Eintrag:

mysql> DESCRIBE xyz;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
snip ...
| Nr            | tinyint(4)   | YES  | MUL | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

Unter Key erscheint der Eintrag MUL. Den habe ich wohl mit UNIQUE 
ausgeloest, aber was bedeutet er? Bisher fand ich alles in der mysql 
shell ziemlich selbsterklaerend, aber gibt es Infos, was welche 
Eintraege dort genau bedeuten?

Aber nochmal zur Praxis: Ich moechte beim Anlegen neuer Datensaetze 
in dieser Tabelle in die Spalte Nr Werte eintragen, die eigentlich 
automatisch generiert werden bzw die ich nicht extra vergebe. Die 
NULL ist mir da im Prinzip recht. Optional moechte ich aber diese 
Werte nachtraeglich aendern in sinnvolle numerische Werte, und dann 
sollten nie zwei identisch sein duerfen.

Wenn ich Nr als NOT NULL definiere, wie kann ich ohne auto_increment 
automatisch Werte eintragen, die Sinn machen? Kann ich z.B. einen 
INSERT fuer dieses Feld definieren, der mir die Menge der vorhandenen 
Datensaetze ausliest und so lange 1 addiert, bis der enstandene Wert 
noch nicht vorkommt (in der Tabelle kann ich jederzeit Eintraege 
loeschen, wodurch die Zaehlung natuerlich verloren geht). Bei 
auto_increment kann ich ja nachtraeglich die Werte nicht mehr 
aendern, daher kommt das nicht in Frage ...

Und arbeitet UNIQUE tatsaechlich so, dass es NULL zulaesst aber alle 
anderen Werte nicht identisch sein duerfen? Das wuerde mir im Prinzip 
sogar am meisten entgegen kommen.

Sorry, der Text ist arg lang. Habe aber trotz sehr langem Suchen 
weder im Manual noch in meinem MySQL Buch dazu Infos gefunden.

Bin fuer jeden Hinweis dankbar,
Gruesse und einen schoenen Tag
Friederun Goellner

php::bar PHP Wiki   -   Listenarchive