![]() |
|||
| HSG |
|
In der Tabelle test1 wird das Feld nr so eingeschränkt, dass nur die ganzen Zahlen größer 3 eingegeben werden können.
create table test1 (nr integer,constraint nr_pruef check(nr > 3));
Leider kann man unter MySQL5.1 und InnoDB weiter Zahlen <= 3 eingeben.
MySQL5.1 unterstützt Check-Constraints nicht. (Handbuch: "The CHECK clause is parsed but ignored by all storage engines." Danke Uwe!)
Was ist davon zu halten, dass eine SQL-Anweisung ohne Fehlermeldung durchgeführt wird, aber nicht das bewirkt, was sie vorgibt zu bewirken? Wollen wir sowas?
In Using an updatable VIEW as a constraint wird ein Weg beschrieben, die erwünschte Absicherung zu erreichen:
create view view_test1 as select * from test1 where nr > 3 with cascaded check option;
Jetzt kann man tatsächlich in den View keine Zahlen <= 3 mehr eingeben. In die Tabelle jedoch weiterhin. Das heißt, man muss den View als 'Pseudo-Tabelle' benutzen, um die gewünschte Funktionalität zu erreichen.