Problema:
Vuoi conoscere i nomi predefiniti dei vincoli in una tabella in Oracle.
Esempio:
Nel nostro database creiamo due tabelle, country
e student
, con i seguenti vincoli:PRIMARY KEY
(l'id della colonna nelle tabelle country
e student
), FOREIGN KEY
(la colonna country_id
nella tabella student
), DEFAULT
(la colonna name
nella tabella student
), UNIQUE
(la colonna name
nella tabella country
e la colonna personal_number
nella tabella student
), e CHECK
(la colonna age
nella tabella student
).
Soluzione:
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) );
Mostriamo come Oracle denomina i vincoli di queste tabelle per impostazione predefinita. Usa questa query per vederli:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Ecco il risultato:
CONSTRAINT_NAME | TIPO_VINCENTE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | STUDENTE |
SYS_C007366 | P | PAESE |
SYS_C007374 | P | STUDENTE |
SYS_C007367 | U | PAESE |
SYS_C007375 | U | STUDENTE |
SYS_C007372 | C | STUDENTE |
Discussione:
Quando creiamo le nostre tabelle, impostiamo dei vincoli per alcune colonne. Tuttavia, non specifichiamo i nomi per questi vincoli, quindi sono denominati per impostazione predefinita. Come vengono generati i nomi predefiniti per i vincoli?
In Oracle, il nome del vincolo predefinito inizia con il nome utente, seguito da '_C
' e un numero di sequenza. I tipi di vincolo sono "C
' (check
), ‘P
' (chiave primaria), 'U
' (vincolo univoco) e 'R
' (chiave straniera). Tutti i nomi dei vincoli predefiniti vengono generati come "SYS
', '_
', e il numero. Puoi vedere i nomi predefiniti nella tabella sopra. Ad esempio, il CHECK
vincolo per l'età della colonna nel student
la tabella ha il nome SYS_C007372
.