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

DDL

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 );