Problema:
Desea conocer los nombres predeterminados de las restricciones en una tabla en Oracle.
Ejemplo:
En nuestra base de datos, creamos dos tablas, country
y student
, con las siguientes restricciones:PRIMARY KEY
(el id de la columna en las tablas country
y student
), FOREIGN KEY
(la columna country_id
en la tabla student
), DEFAULT
(la columna name
en la tabla student
), UNIQUE
(la columna name
en la tabla country
y la columna personal_number
en la tabla student
), y CHECK
(la columna age
en la tabla student
).
Solución:
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) );
Veamos cómo Oracle nombra las restricciones de estas tablas de forma predeterminada. Usa esta consulta para verlos:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Aquí está el resultado:
CONSTRAINT_NAME | CONSTRAINT_TYPE | NOMBRE_TABLA |
---|---|---|
SYS_C007376 | R | ESTUDIANTE |
SYS_C007366 | P | PAÍS |
SYS_C007374 | P | ESTUDIANTE |
SYS_C007367 | T | PAÍS |
SYS_C007375 | T | ESTUDIANTE |
SYS_C007372 | C | ESTUDIANTE |
Discusión:
Cuando creamos nuestras tablas, establecemos restricciones para algunas columnas. Sin embargo, no especificamos los nombres de estas restricciones, por lo que se nombran de forma predeterminada. ¿Cómo se generan los nombres predeterminados para las restricciones?
En Oracle, el nombre de restricción predeterminado comienza con el nombre de usuario, seguido de '_C
' y un número de secuencia. Los tipos de restricción son 'C
' (check
), ‘P
' (clave principal), 'U
' (restricción única) y 'R
' (clave externa). Todos los nombres de restricciones predeterminados se generan como 'SYS
', '_
', y el número. Puede ver los nombres predeterminados en la tabla anterior. Por ejemplo, el CHECK
restricción para la edad de la columna en el student
la tabla tiene el nombre SYS_C007372
.