Oracle
 sql >> Database >  >> RDS >> Oracle

Qual è il nome del vincolo predefinito in Oracle?

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 .