Problem:
Sie möchten die Standardnamen von Constraints in einer Tabelle in Oracle kennen.
Beispiel:
In unserer Datenbank erstellen wir zwei Tabellen, country
und student
, mit den folgenden Einschränkungen:PRIMARY KEY
(die Spalten-ID in den Tabellen country
und student
), FOREIGN KEY
(die Spalte country_id
in der Tabelle student
), DEFAULT
(die Spalte name
in der Tabelle student
), UNIQUE
(die Spalte name
in der Tabelle country
und die Spalte personal_number
in der Tabelle student
) und CHECK
(die Spalte age
in der Tabelle student
).
Lösung:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) DEFAULT 'UNKNOWN', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Lassen Sie uns zeigen, wie Oracle die Einschränkungen dieser Tabellen standardmäßig benennt. Verwenden Sie diese Abfrage, um sie anzuzeigen:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Hier ist das Ergebnis:
CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | SCHÜLER |
SYS_C007366 | P | LAND |
SYS_C007374 | P | SCHÜLER |
SYS_C007367 | U | LAND |
SYS_C007375 | U | SCHÜLER |
SYS_C007372 | C | SCHÜLER |
Diskussion:
Wenn wir unsere Tabellen erstellen, legen wir Einschränkungen für einige Spalten fest. Wir geben jedoch keine Namen für diese Einschränkungen an, daher werden sie standardmäßig benannt. Wie werden die Standardnamen für Einschränkungen generiert?
In Oracle beginnt der standardmäßige Constraint-Name mit dem Benutzernamen, gefolgt von „_C
“ und eine fortlaufende Nummer. Die Einschränkungstypen sind „C
’ (check
), ‘P
“ (Primärschlüssel), „U
“ (eindeutige Einschränkung) und „R
' (Unbekannter Schlüssel). Alle Standardbeschränkungsnamen werden als „SYS
“ generiert ’, ‚_
“ und die Nummer. Sie können die Standardnamen in der obigen Tabelle sehen. Zum Beispiel CHECK
Einschränkung für das Spaltenalter im student
Tabelle hat den Namen SYS_C007372
.