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
.