Constraints werden verwendet, um ungültige Dateneinträge in Tabellen zu verhindern. Mit dem Anlegen von Constraints werden Regeln auf Tabellenebene erzwungen, sobald eine DML-Anweisung ausgeführt wird. Das Löschen einer Tabelle oder Tabellenzeile wird verhindert, falls Abhängigkeiten zu anderen Tabellen bestehen. Oberstes Ziel ist demnach die Gewährleistung der Datenintegrität.
Folgende Constraints sind in Oracle zulässig (in Klammern ist der Constraint-Typ angegeben, unter dem das Constraint in der View USER_CONTRAINTS angezeigt wird):
Constraints können entweder beim Anlegen der Tabelle (CREATE TABLE) angegeben werden oder nachträglich über ALTER TABLE.
Beispiele:
1.) Erzeugt ein NOT NULL-Constraint (ohne Namensangabe):
SQL> CREATE TABLE test (nr number NOT NULL, name varchar2(10));
2.) Erzeugt einen Primärschlüssel (Angabe auf Spaltenebene):
SQL> CREATE TABLE dept (deptno number(3) CONSTRAINT pk_dept PRIMARY KEY,
dname varchar2(10), loc varchar2(10));
3.) Erzeugt einen Primär- und einen Fremdschlüssel (beide auf Tabellenebene):
SQL> CREATE TABLE emp (empno number(3), ename varchar2(10), deptno number(3),
CONSTRAINT pk_emp PRIMARY KEY(empno),
CONSTRAINT fk_deptno FOREIGN KEY(deptno) REFERENCES
dept(deptno));
4.) Erzeugt nachträglich ein NOT NULL-Constraint (mit Namensangabe):
SQL> ALTER TABLE test MODIFY (name CONSTRAINT nn_name NOT NULL);
5.) Erzeugt nachträglich ein CHECK-Constraint mit den zwei Bedingungen:
alle Namen müssen in Großbuchstaben angegeben werden und mind. 5 Zeichen lang sein.
SQL> ALTER TABLE test ADD (CONSTRAINT ck_name
CHECK (upper(name)=name) AND length(name)>=5));
6.) Erzeugt einen Fremdschlüssel, der Löschvorgänge der übergeordneten Tabelle weiterreicht:
SQL> ALTER TABLE emp_copy ADD (CONSTRAINT fk_copy FOREIGN KEY(deptno)
REFERENCES dept(deptno) ON DELETE CASCADE);
[alternativ: ON DELETE SET NULL]
7.) Löscht ein bestehendes Constraint:
SQL> ALTER TABLE test DROP CONSTRAINT ck_name;
Informationen zu Constraints im Data Dictionary:
Eine Übersicht über die eigenen Constraints erhält man über die View USER_CONSTRAINTS. Auf welche Spalten die Constraints gelegt sind, sehen Sie in USER_CONS_COLUMNS.
Folgender SELECT joint die beiden Views und gibt die wichtigsten Informationen zurück:
SQL> SELECT a.constraint_name, a.constraint_type, a.table_name, b.column_name,
a.search_condition, a.r_constraint_name
FROM user_constraints a, user_cons_columns b
WHERE a.constraint_name = b.constraint_name;
Tipps zu Constraints:
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.