Problem:
Du vill veta standardnamnen på begränsningar i en tabell i Oracle.
Exempel:
I vår databas skapar vi två tabeller, country och student , med följande begränsningar:PRIMARY KEY (kolumn-id:t i tabellerna country och student ), FOREIGN KEY (kolumnen country_id i tabellen student ), DEFAULT (kolumnen name i tabellen student ), UNIQUE (kolumnen name i tabellen country och kolumnen personal_number i tabellen student ), och CHECK (kolumnen age i tabellen student ).
Lösning:
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) );
Låt oss visa hur Oracle namnger begränsningarna för dessa tabeller som standard. Använd den här frågan för att se dem:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Här är resultatet:
| CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
|---|---|---|
| SYS_C007376 | R | STUDENT |
| SYS_C007366 | P | LAND |
| SYS_C007374 | P | STUDENT |
| SYS_C007367 | U | LAND |
| SYS_C007375 | U | STUDENT |
| SYS_C007372 | C | STUDENT |
Diskussion:
När vi skapar våra tabeller sätter vi begränsningar för vissa kolumner. Vi anger dock inte namnen för dessa begränsningar, så de namnges som standard. Hur genereras standardnamnen för begränsningar?
I Oracle börjar standardnamnet med användarnamnet, följt av _C ’ och ett sekvensnummer. Typerna av begränsningar är 'C ’ (check ), 'P ' (primär nyckel), 'U ' (unik begränsning) och 'R ' (främmande nyckel). Alla standardbegränsningsnamn genereras som 'SYS ', '_ ’ och numret. Du kan se standardnamnen i tabellen ovan. Till exempel, CHECK begränsning för kolumnen ålder i student tabellen har namnet SYS_C007372 .