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 .