Mysql 4.0: Unique Frage
Twilo
- datenbank
0 André Laugks0 Twilo0 André Laugks0 Twilo
Hallo,
hier ein Ausschnitt aus meinen Tabellen
Farben Produkt Produkt_has_Farbe
+----------+ +-------------+ +---------------+
| _farb_id | | _produkt_id | | _farb_id |
+----------+ +-------------+ +---------------+
| ... | | ... | | _produkt_id |
+----------+ +-------------+ +---------------+
| _default |
+---------------+
_default ist im Moment enum(0,1)
geht so etwas
+---------------+---------------+---------------+
| _farb_id | _produkt_id | _default |
+---------------+---------------+---------------+
| aaa | 1 | 0 |
+---------------+---------------+---------------+
| bbb | 1 | 0 |
+---------------+---------------+---------------+
| ccc | 1 | 0 |
+---------------+---------------+---------------+
| yyy | 1 | 1 |
+---------------+---------------+---------------+
| xxx | 1 | 1 | <--- nicht zulässig, da es schon ein default gibt, bei der ProduktID
+---------------+---------------+---------------+
muss ich das selber lösen, dass ein Produkt nur ein Default haben kann, oder kann man das irgendwie mit der Datenbank lösen?
mfg
Twilo
Hallo!
muss ich das selber lösen, dass ein Produkt nur ein Default haben kann, oder kann man das irgendwie mit der Datenbank lösen?
UNIQUE lässt unendlich vielen Zeilen mit NULL zu. Wenn Du also anstatt von "0" "NULL" verwendest, kann UNIQUE Dein Problem lösen.
mysql> SELECT * FROM test;
+------+
| id |
+------+
| NULL |
| 1 |
| NULL |
| NULL |
+------+
4 rows in set (0.00 sec)
mysql> INSERT INTO test (id) VALUES (1);
ERROR 1062 (23000): Duplicate entry '1' for key 1
Du solltest trotzdem über die Applikation testen, ob schon einmal "1" existiert und vielleicht eine Fehlermeldung anzeigen.
UNIQUE kann Dir lediglich helfen, die Datenintegrität zu wahren.
André Laugks
Hallo,
muss ich das selber lösen, dass ein Produkt nur ein Default haben kann, oder kann man das irgendwie mit der Datenbank lösen?
UNIQUE lässt unendlich vielen Zeilen mit NULL zu. Wenn Du also anstatt von "0" "NULL" verwendest, kann UNIQUE Dein Problem lösen.
dafür müßte ich dann aber int, z.B. tinyint nehmen, oder?
hab es eben zu tinyint geändert, da funktioniert es :-)
Du solltest trotzdem über die Applikation testen, ob schon einmal "1" existiert und vielleicht eine Fehlermeldung anzeigen.
UNIQUE kann Dir lediglich helfen, die Datenintegrität zu wahren.
das ist klar, ich möchte damit nur verhindern, dass durch ein dummen Zufall 2 als "Standard" gekennzeichnet sind
danke
mfg
Twilo
Hallo!
dafür müßte ich dann aber int, z.B. tinyint nehmen, oder?
hab es eben zu tinyint geändert, da funktioniert es :-)
Ich habe schon seit Ewigkeiten kein ENUM mehr verwendet. Ich bin mir nicht sicher, ob ENUM auch NULL kennt. Wenn nicht, müßte es so lauten:
ENUM(1) DEFAULT NULL
Bei einem Wert macht ENUM dann aber wieder keinen Sinn.
ENUM ist eine Erfindung von MySQL. Wenn man eine Applikation eine für verschiedene Datenbankserver schreibt, kann man mit ENUM nicht anfangen. Bei anderen Datenbankservern, macht man das über eine 1:n Beziehung:
id AutoTyp
1 Volvo
2 Porsche
3 BMW
Name id_AutoTyp
André 1
Ina 2
Dieter 1
Lias 3
André Laugks
Hallo,
dafür müßte ich dann aber int, z.B. tinyint nehmen, oder?
hab es eben zu tinyint geändert, da funktioniert es :-)
Ich habe schon seit Ewigkeiten kein ENUM mehr verwendet. Ich bin mir nicht sicher, ob ENUM auch NULL kennt. Wenn nicht, müßte es so lauten:
ENUM(1) DEFAULT NULL
hatte irgendwie nicht funktioniert, er hatte dann -1 eingetragen
ENUM ist eine Erfindung von MySQL. Wenn man eine Applikation eine für verschiedene Datenbankserver schreibt, kann man mit ENUM nicht anfangen. Bei anderen Datenbankservern, macht man das über eine 1:n Beziehung:
oh, das wußte ich nicht, danke für die Info :-)
mfg
Twilo