Está en la página 1de 27

ADMINISTRACIÓN DE BASE DE DATOS

Constraints
(Restricciones)
Objetivos

Al completar esta lección, debería ser capaz


de hacer lo siguiente:
• Describir constraints
• Crear y mantener constraints
¿Qué son las Constraints?
• “Fuerzan reglas a nivel de tabla”
• Las constraints previenen el borrado de
una tabla si existen dependencias.
• Los siguientes tipos de constrainst son
válidos en Oracle:
– NOT NULL
– UNIQUE Key
– PRIMARY KEY
– FOREIGN KEY
– CHECK
Guía para el Uso de Constraints
• Asigne un nombre a la restricción, en
caso contrario el Server generará uno
usando el formato SYS_Cn.
• Se puede crear una restricción
– En el momento de crear la tabla.
– Después que la tabla ha sido
creada.
• Se puede definir un restricción a nivel de
columna o a nivel de tabla.
• Vea la constraint en el diccionario de
datos.
Definición de Constraints
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],

[table_constraint])
;

CREATE TABLE emp(


(empno NUMBER(4),
VARCHAR2(10),
ename
… NUMBER(7,2) NOT NULL,
deptno
CONSTRAINT emp_empno_pk
PRIMARY KEY (EMPNO));
Definición de Constraints

• Constraint a nivel de columna:


column
column [CONSTRAINT
[CONSTRAINT constraint_name]
constraint_name] constraint_type,
constraint_type,

• Constraint a nivel de tabla:


column,...
column,...
[CONSTRAINT
[CONSTRAINT constraint_name]
constraint_name] constraint_type
constraint_type
(column,
(column, ...),
...),
La Constraint NOT NULL
Asegura que los valores nulos no serán
permitidos para la columna.
EMP
EMPNO ENAME JOB ... COMM DEPTNO

7839 KING PRESIDENT 10


7698 BLAKE MANAGER 30
7782 CLARK MANAGER 10
7566 JONES MANAGER 20
...

NOT NULL constraint Ausencia de la Constraint NOT NULL


(ningún registro podrá constraint NOT NULL
contener un valor nulo (cualquier reg. puede
para esta columna) contener un valor nulo
para esta columna)
La Constraint NOT NULL
Definido a nivel de columna:
SQL> CREATE TABLE emp(
2 empno NUMBER(4),
3 ename VARCHAR2(10) NOT NULL,
4 job VARCHAR2(9),
5 mgr NUMBER(4),
6 hiredate DATE,
7 sal NUMBER(7,2),
8 comm NUMBER(7,2),
9 deptno NUMBER(7,2) NOT NULL);
La Constraint UNIQUE Key
Constraint UNIQUE key
DEPT
DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK


20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Insert into No permitido


50 SALES DETROIT (DNAMESALES
ya existe)
60 BOSTON permitido
La Constraint UNIQUE Key

Definido bien a nivel de tabla o de columna:

SQL> CREATE TABLE dept(


2 deptno NUMBER(2),
3 dname VARCHAR2(14),
4 loc
5 CONSTRAINTVARCHAR2(13),
dept_dname_uk UNIQUE);
La Constraint PRIMARY KEY
PRIMARY key
DEPT
DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK


20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

Insert into No permitido


20 MARKETING DALLAS (DEPTNO20
ya existe)
FINANCE NEW YORK No permitido
(DEPTNO es null)
La Constraint PRIMARY KEY

Definido bien a nivel de tabla o de columna:

SQL> CREATE TABLE dept(


2 deptno NUMBER(2),
3 dname VARCHAR2(14),
4 loc
5 CONSTRAINTVARCHAR2(13),
dept_dname_uk UNIQUE,
6 CONSTRAINT dept_deptno_pk PRIMARY KEY);
The FOREIGN KEY Constraint
DEPT

PRIMARY DEPTNO DNAME LOC


key
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
...

EMP
EMPNO ENAME JOB ... COMM DEPTNO FOREIGN
key
7839 KING PRESIDENT 10
7698 BLAKE MANAGER 30
...
No permitido
Insert into (DEPTNO
7571 FORD MANAGER ... 200 9 no existe en
la
7571 FORD MANAGER ... 200 tabla DEPT
Permitido
The FOREIGN KEY Constraint

Definido bien a nivel de tabla o de columna:


SQL> CREATE TABLE emp(
2 empno NUMBER(4),
3 VARCHAR2(10) NOT NULL,
4 ename VARCHAR2(9),
5 job NUMBER(4),
6 mgr DATE,
7 hiredate NUMBER(7,2),
8 sal NUMBER(7,2),
9 comm NUMBER(7,2) NOT NULL,
10 deptno
CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno)
11 REFERENCES dept (deptno));
La Constraint FOREIGN KEY
Palabras Reservadas
• FOREIGN KEY
– Define la columna en la tabla hija a
nivel de constraint de tabla
• REFERENCES
– Identifica la tabla y columna en la
tabla padre
• ON DELETE CASCADE
– Permite borrar en la tabla padre y
borrar registros dependientes de la
tabla hija.
La Constraint CHECK
• Define una condición que debe satisfacer cada fila.
• Expresiones no permitidas:
– Referencias a las pseudocolumnas CURRVAL,
NEXTVAL, LEVEL, o ROWNUM.
– Llamadas a las funciones SYSDATE, UID, USER, o
USERENV.
– Consultas que se refieran a otros valores en otras
filas.
• Se define o bien como una restricción a nivel de tabla, o
a nivel de columna.
..., deptno NUMBER(2),
CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10
AND 99),...
Añadir una Constraint

ALTER
ALTER TABLE
TABLE table
table
ADD
ADD [CONSTRAINT
[CONSTRAINT constraint]
constraint] type
type (column);
(column);

• Añade o borra, pero no modifica una


constraint.
• Activa-Desactiva constraints.
• Añade una constraint NOT NULL con la
cláusula MODIFY.
Añadir una Constraint
Añada una constraint FOREIGN KEY en la
tabla EMP indicando que un manager
(director) tiene que existir previamente
como número de empleado.
SQL> ALTER TABLE emp
2 ADD CONSTRAINT emp_mgr_fk
3FOREIGN KEY(mgr) REFERENCES emp(empno); Table
altered.
Eliminación de una Constraint
• Borra la constraint del manager de la
tabla EMP.
SQL>
SQL> ALTER
ALTER TABLE
TABLE emp
emp
22DROP
DROP CONSTRAINTemp_mgr_fk;
CONSTRAINTemp_mgr_fk;
Table
Table altered.
altered.

• Borra la constraint de PRIMARY KEY


de la tabla DEPT y borra la constraint de
FOREIGN KEY asociada en la columna
EMP.DEPTNO.
SQL>
SQL> ALTER
ALTER TABLE
TABLE dept
dept
22DROP
DROP PRIMARY
PRIMARY KEY
KEY CASCADE;
CASCADE;
Table
Table altered.
altered.
Desactivar Constraints
• Ejecute la cláusula DISABLE de la
sentencia ALTER TABLE para
desactivar una constraint de
integridad.
• Utilice la opción CASCADE para
desactivar constrains
SQL>
SQL> ALTER
ALTER TABLE
TABLE emp
emp
dependientes.
2 DISABLE
2 DISABLE emp_empno_pk
CONSTRAINT emp_empno_pk CASCADE;
CASCADE;
CONSTRAINT
Table
Table altered.
altered.
Activar Constraints
• Active una constraint de integridad
actualmente desactivada en la
definición de la tabla, por medio de
la
cláusula
SQL>
SQL> ALTER
ENABLE. emp
ALTER TABLE
TABLE emp
22 ENABLE
ENABLE
CONSTRAINT emp_empno_pk;
emp_empno_pk;
Table
CONSTRAINT
Table altered.
altered.

• Un índice UNIQUE o de PRIMARY KEY


se crea automáticamente si activa
una
constraint tipo UNIQUE o PRIMARY
KEY
Visualización de Constraints
Consulte la tabla USER_CONSTRAINTS
para ver todos los nombres y definiciones
de constraints.
SQL> SELECT constraint_name, constraint_type,
2 search_condition
3 FROM user_constraints
4 WHERE table_name = 'EMP';

CONSTRAINT_NAME
CONSTRAINT_NAME CC SEARCH_CONDITION
SEARCH_CONDITION
------------------------ -- -------------------------
SYS_C00674
SYS_C00674 CC EMPNO
EMPNO IS
IS NOT
NOT NULL
NULL
SYS_C00675
SYS_C00675 CC DEPTNO
DEPTNO IS NOT NULL
IS NOT NULL
EMP_EMPNO_PK
EMP_EMPNO_PK PP
...
...
Visualización de las Columnas
Asociadas con Constraints
Visualice las columnas asociadas con los
nombres de constraints en la vista:
USER_CONS_COLUMNS
SQL> SELECT constraint_name, column_name
2 FROM user_cons_columns
3 WHERE table_name = 'EMP';

CONSTRAINT_NAME
CONSTRAINT_NAME COLUMN_NAME
COLUMN_NAME
------------------------- ----------------------
EMP_DEPTNO_FK
EMP_DEPTNO_FK DEPTNO
DEPTNO
EMP_EMPNO_PK
EMP_EMPNO_PK EMPNO
EMPNO
EMP_MGR_FK
EMP_MGR_FK MGR
MGR
SYS_C00674
SYS_C00674 EMPNO
EMPNO
SYS_C00675
SYS_C00675 DEPTNO
DEPTNO
Resumen
• Cree los siguientes tipos de constraints:
– NOT NULL
– UNIQUE Key
– PRIMARY KEY
– FOREIGN KEY
– CHECK
• Consulte la tabla USER_CONSTRAINTS para
ver todos los nombres y definiciones de
constraints.
Visión General de la Práctica

• Añada constraints a tablas ya existentes.


• Añada columnas adicionales a una tabla.
• Visualice información de vistas del D.D.
Gracias

También podría gustarte