Databases
T05-005 Modificación de tablas
Enunciado
Modificar columnas de una tabla. Restricciones.
Entre las modificaciones que podemos realizar de la definición de las columnas, también está la de añadir o modificar las restricciones existentes sobre dichas columnas.
Sintaxis:
ALTER TABLE NombreTabla MODIFY
(Columna1 TipoDatos [propiedades]
[, columna2 TipoDatos [propiedades] ...] );Ejemplo:
Imaginemos que hemos ejecutado las siguientes sentencias de creación de tablas:
CREATE TABLE ESTUDIANTES (
Nombre VARCHAR2(25),
Apellidos VARCHAR2(50),
FechaNac DATE,
Curso NUMBER
);
CREATE TABLE CURSOS (
Curso NUMBER,
Nombre VARCHAR2(25)
);Pero, es necesario incorporar las siguientes restricciones:
- El atributo Curso de la tabla CURSOS debe ser la clave primaria de dicha tabla.
- El atributo Nombre de ambas tablas no puede ser NULL.
- El valor del atributo FechaNac debe ser anterior al 01/01/2000
- El atributo Curso de la tabla ESTUDIANTES debe referenciar a la tabla CURSOS.
ALTER TABLE CURSOS MODIFY (
Curso NUMBER PRIMARY KEY,
Nombre VARCHAR2(25) NOT NULL
);
ALTER TABLE ESTUDIANTES MODIFY (
Nombre VARCHAR2(25) NOT NULL,
FechaNac DATE CHECK (FechaNac < TO_DATE('01-01-2000', 'DD-MM-YYYY')),
Curso NUMBER REFERENCES CURSOS (Curso)
);Ejercicio:
Imagina que hemos creado las siguientes tablas:
CREATE TABLE MODULOS (
CODIGO NUMBER,
NOMBRE VARCHAR2 (100),
CICLO CHAR(5)
);
CREATE TABLE LIBROS (
ISBN NUMBER,
TITULO VARCHAR2 (100),
MODULO NUMBER
);Incorpora las siguientes restricciones:
- El atributo CODIGO de la tabla MODULOS debe ser la clave primaria de dicha tabla.
- El atributo ISBN de la tabla LIBROS debe ser la clave primaria de dicha tabla.
- Los atributos NOMBRE y TITULO no pueden contener el valor NULL.
- El valor del atributo CICLO debe ser INF01 o INF02
- El atributo MODULO de la tabla LIBROS debe referenciar a la tabla MODULOS.
Tipo
Solución
ALTER TABLE MODULOS MODIFY (
CODIGO NUMBER PRIMARY KEY,
NOMBRE VARCHAR2(100) NOT NULL,
CICLO CHAR(5) CHECK (CICLO IN('INF01', 'INF02'))
);
ALTER TABLE LIBROS MODIFY (
ISBN NUMBER PRIMARY KEY,
TITULO VARCHAR2(100) NOT NULL,
MODULO NUMBER REFERENCES MODULOS(CODIGO)
);
Prueba
SELECT USER_CONSTRAINTS.TABLE_NAME, STATUS, COLUMN_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS JOIN USER_CONS_COLUMNS USING (CONSTRAINT_NAME)
WHERE USER_CONSTRAINTS.TABLE_NAME IN ('MODULOS', 'LIBROS') ORDER BY COLUMN_NAME;
LibrerÃas (Onfly databases)
CREATE TABLE MODULOS (
CODIGO NUMBER,
NOMBRE VARCHAR2 (100),
CICLO CHAR(5)
);
CREATE TABLE LIBROS (
ISBN NUMBER,
TITULO VARCHAR2 (100),
MODULO NUMBER
);

