SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


                            TEMA 3
              LENGUAJE DE DEFINICIÓN DE DATOS (DDL)

    1. Creación de tablas.
    2. Modificación de tablas.
    3. Borrado de tablas.




Prácticas de Diseño y Gestión de Bases de Datos                    Page 1 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)



El lenguaje de definición de datos en SQL según vimos en el tema anterior se divide en
los siguientes comandos:

                             •   CREATE TABLE
                             •   ALTER TABLE
                             •   DROP TABLE.


1. CREACIÓN DE UNA TABLA.


Una tabla se crea con la orden CREATE TABLE.
La sintáxis del comando CREATE TABLE es una sintáxis reducida del comando. Luego
veremos la sintáxis completa del comando CREATE TABLE. Por ahora para crear una
tabla tenemos suficiente con la siguiente.

Sintáxis

CREATE TABLE nombre_tabla
     (nombre_columna tipo_dato [longitud][NOT NULL],
     nombre_columna tipo_dato [longitude][NOT NULL],
     …) [TABLESPACE espacio_de_tabla};


Con esto creamos la tabla dentro de nuestra base, le damos un nombre, y creamos su
estructura. Sólo queda introducer los datos.
Una vez que la tabla está creada su definición queda en el diccionario de datos.

    a) Nombre de tabla

            • Un nombre de tabla tiene una longitude maxima.
            • Su nombre tiene que ser diferente a cualquier otra tabla o vista de la base
            de de datos.
            • El nombre de la tabla nunca podrá ser una palabra reservada de la base de
            datos.
            • Puede ser mayúsculas o minúsculas, es indiferente.

    b) Definición de columnas

        Cada columna de una tabla tendrá lo siguiente:

            • Nombre del campo dentro de una tabla.
            • Tipo de dato, con su longitude si es que procede y NOT NULL si ninca
            puede estar vacío.


Prácticas de Diseño y Gestión de Bases de Datos                            Page 2 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


            • La definición de cada columna va separada por ‘,’.
            • El nombre de campo sigue las mismas reglas que el nombre de tabla, pero
            las columnas pueden tener el mismo nombre si son tables distintas.
            • Se pueden definer como máximo 254 columnas.
            • Las claves primarias se deben definir como NOT NULL.


    c) Reglas para la definición de los nombres

•     Nombres únicos. Los nombres de las tables no pueden repetirse en una misma base
      de datos. No pueden coincidir con una palabra clave.
•     Caracteres. El primer caracter tiene que ser una letra. El resto de caracteres es libre,
      pero sin ‘,’. El máximo es 30.

Según la sintáxis anterior vamos a crear las tablas en SQL*PLUS.

ESTRUCTURA DE NUESTRA BASE DE DATOS

•     Ha llegado la hora de saber cómo va a estar organizada nuestra base de datos.
•     Aunque al principio el siseño pueda parecer un poco complejo, veamos un gráfico
      representativo de nuestra base de datos.
•     Nuestra base de datos estará comprendida por las siguientes tablas:
                       o Clientes
                       o Tiendas
                       o Proveedores
                       o Articulos
                       o Ventas

Toda tabla tiene una clave primaria. La clave primaria es aquella que identifica a una sola
tupla (fila) de esa tabla. Representaremos los campos que son clave primaria con el
símbolo #.




Prácticas de Diseño y Gestión de Bases de Datos                               Page 3 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)




Tabla Clientes:

                  #clt_num       clt_apell        clt_nom   clt_pais   clt_pob

•       La tabla clientes lleva un número de identificación único no vacío (la clave
        primaria clt_num), el apellido del cliente (clt_apell), su nombre (clt_nom),
        nacionalidad (clt_pais) y su ciudad (clt_pob).


Tabla Tiendas:

                               #tda_num           tda_pob   tda_ger

•       La tabla tiendas incluye un número de identificación único no vacío (la clave
        primaria tda_num), el área geográfica en que se encuentra la tienda (tda_pob), y el
        nombre del gerente (tda_ger).




Prácticas de Diseño y Gestión de Bases de Datos                                  Page 4 of 23
Formación 2002. Tema 3.     Lenguaje de Definición de Datos (DDL)


Tabla Proveedores:

                                     #prv_num      prv_nom

•       Contiene un número de identificación único, que es la clave primaria (prv_num),
        y el nombre del proveedor (prv_nom). Existe un enlace funcional 1:N entre la
        tabla proveedores y la tabla artículos, a través del número de proveedor que
        aparece para cada artículo en la columna art_prv.


Tabla Articulos:

#art_num       art_nom        art_peso        art_col    art_pc        art_pv        art_prv

•       Tiene un número de identificación único, la clave primaria (art_num), y contiene
        además el nombre del artículo (art_nom), su peso (art_peso), su color (art_col), el
        precio de compra (art_pc), el precio de venta (art_pv) y el número de proveedor
        (art_prv), el cual hace de clave foránea para poderse relacionar con el número de
        proveedores de la tabla proveedores.


Tabla Ventas:

#vnt_clt         #vnt_tda         #vnt_art        vnt_cant        vnt_precio     #vnt_fch

•       La tabla ventas es una tabla que crea dos enlaces, entre las tables tiendas y clients
        por un lado, y clients y artículos por otro, lo que permite el seguimiento de los
        artículos comprados por cada cliente y de las tiendas donde se efectuaron las
        adquisiciones. La columna vnt_clt contiene el número de cliente, la columna
        vnt_tda el número de tienda de adquisición y la comlumna vnt_art el número de
        artículo adquirido. De igual modo, se memoriza la cantidad (vnt_cant), el precio
        de venta (vnt_precio) y la fecha de venta (vnt_fch). Si un cliente compra varios
        artículos se introducen en esta tabla tantas filas como artículos se han adquirido.
        La clave primaria de la tabla se ha formado por la unión de cuatro claves foráneas,
        que son vnt_clt, vnt_tda, vnt_art y vnt_fch. Esto significa, que un cliente no va a
        comprar el mismo artículo en la misma tienda y en la misma fecha.




Prácticas de Diseño y Gestión de Bases de Datos                                Page 5 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


CREACIÓN DE LAS TABLAS DE NUESTRA BASE DE DATOS

    •   Creación de la tabla ‘clientes’

        CREATE TABLE clientes (
            clt_num INTEGER NOT NULL PRIMARY KEY,
            clt_apell CHAR(10),
            clt_nom CHAR(10),
            clt_pais CHAR(1),
            clt_pob CHAR(10)
        );

La clave primaria de una tabla nunca puede estar vacía. Esto quiere decir que en la
definición de una tabla, siempre tendremos que poner NOT NULL en el campo que es
clave primaria.

Las claves primarias serán aquellas que nos permitirán relaccionar las filas de una tabla
con las filas de otra tabla.

    •   Creación de la tabla ‘tiendas’

        CREATE TABLE tiendas (
            tda_num INTEGER NOT NULL PRIMARY KEY,
            tda_pob CHAR(15),
            tda_ger CHAR(25)
        );

    •   Creación de la tabla ‘proveedores’

        CREATE TABLE proveedores (
             prv_num integer NOT NULL PRIMARY KEY,
             prv_nom CHAR(25)
        );

    •   Creación de la tabla ‘articulos’

        CREATE TABLE articulos (
            art_num INTEGER NOT NULL PRIMARY KEY,
            art_nom CHAR(20),
            art_peso INTEGER,
            art_col CHAR(10),
            art_pc INTEGER,
            art_pv INTEGER,
            art_prv INTEGER
        );


Prácticas de Diseño y Gestión de Bases de Datos                             Page 6 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


    •   Creación de la tabla ‘ventas’

        CREATE TABLE ventas (
           vnt_clt INTEGER NOT NULL,
           vnt_tda INTEGER NOT NULL,
           vnt_art INTEGER NOT NULL,
           vnt_cant INTEGER NOT NULL,
           vnt_precio INTEGER NOT NULL,
           vnt_fch NUMBER(8)
        );

Consideraciones generales:
   a) Las definiciones individuales de columnas se separan mediante comas.
   b) No se pone coma después de la última definición de columna.
   c) Las mayúsculas y minúsculas son indiferentes a la hora de crear una tabla.
   d) Si intentamos crear una tabla y existe otra tabla con ese nombre, aparecerá un
      mensaje de error.

TIPOS DE DATOS EN ORACLE

Oracle soporta los siguientes tipos de datos:

             TIPO DE DATO                                DEFINICIÓN
             CHAR                     Cadena de caracteres de longitud fija. Máximo: 255.
             VARCHAR2                 Cadena de caracteres de longitud variable. Máximo: 2000.
             NUMBER(p,s)              Número entero y real hasta 38 dígitos. ‘p’ es el total de
                                      dígitos(1..38) y ‘s’ es el número de decimales.
             DATE                     Tipo de dato FECHA.
             LONG                     Cadena de caracteres de longitud variable. Máximo: 2GB.
             RAW                      Igual que el tipo VARCHAR2, pero en binario. 255 bytes.
             LONG RAW                 Igual que LONG, pero en binario.
             ROWID                    Tipo de dato int erno. No consideraremos.
             NCHAR                    Oracle version 8. Parecido a CHAR.
             NVARCHAR2                Oracle versión 8. Parecido a CHAR.
             BLOB                     Oracle versión 8. Objeto binario de gran tamaño. 4GB.




1.1. INTEGRIDAD DE LOS DATOS.

    •   Cuando definimos una tabla existen varias condiciones predefinidas.
    •   Por ejemplo, si definimos la columna EDAD en una tabla, está claro que la edad
        debe ser mayor que 0, nunca puede ser negativo.
    •   La integridad hace referencia a que los datos de la base de datos están sujetos a
        unas restricciones antes de almacenarse en ella.
    •   Una restricción de integridad es una regla que restringe el rango de valores para
        una o más columnas en la tabla.

Prácticas de Diseño y Gestión de Bases de Datos                                               Page 7 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


    •   Existe otro tipo que es la integridad referencial, el cual garantiza que los valores
        de una columna dependan de los valores de otra columna ( o columnas) de la
        tabla. Por ejemplo si tuviesemos la tabla VENTA y la tabla ARTICULOS, nunca
        podrá ocurrir que exista una venta de un artículo que no existe.

1.1.1. RESTRICCIONES EN CREATE TABLE.

    •   Para definir las restricciones en la orden CREATE TABLE usamos la cláusula
        CONSTRAINT.
    •   La cláusula CONSTRAINT puede restringir a una sola columna o a un grupo de
        columnas de una misma tabla.
    •   Hay dos formas de especificar las restricciones:
            o Como parte de la definición de columnas
            o Al final, una vez especificadas todas las columnas.

    •   Sintáxis:
           CREATE TABLE nombre_tabla {
           Columna1 TIPO_DE_DATO
               [CONSTRAINT nombre_restricción]
               [NOT NULL]
               [UNIQUE]
               [PRIMARY KEY]
               [DEFAULT valor]
               [REFERENCES nombre_tabla [(columna[, columna])]
                    [ON DELETE CASCADE]]
               [CHECK condición],
           Columna2 .....

            ) [TABLESAPCE espacio_de_tabla];

    •   Ejemplo:
            CREATE TABLE EMPLEADO (
            NOMBRE          VARCHAR2(25) PRIMARY KEY,
            EDAD            NUMBER       CHECK (EDAD BETWEEN 18 AND 35),
            COD_PROVINCIA   NUMBER(2)    REFERENCES PROVINCIAS
                                         ON DELETE CASCADE



    En este ejemplo hemos creado una tabla donde:
    a) La clave primaria es Nombre
    b) Clave ajena: COD_PROVINCIA que referencia la tabla PROVINCIAS.
    c) Verificación de la edad, que debe estar comprendida entre 18 y 35 años.


    Las restricciones de la orden CREATE TABLE que aparecen al final de la definición
    de columnas (o de tabla) se diferencia de la anterior en que se puede hacer referencias
    a varias columnas en una única restricción.

Prácticas de Diseño y Gestión de Bases de Datos                              Page 8 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


    Veamos un ejemplo:

    SQL> CREATE TABLE                     EMPLEADO(
         NOMBRE                           VARCHAR2(25),
         EDAD                             NUMBER,
         COD_PROVINCIA                    NUMBER(2),
         CONSTRAINT                       PRIMARY KEY (NOMBRE)
         CONSTRAINT                       CHECK(EDAD BETWEEN 18 AND 35),
         CONSTRAINT                       FOREIGN KEY (COD_PROVINCIA)
                                          REFERENCES PROVINCIAS ON DELETE CASCADE
         );


    1.1.1.1 Restricción PRIMARY KEY.

    •   Una clave primaria dentro de una tabla es una columna o conjunto de columnas
        que identifican unívocamente a cada fila.
    •   Debe ser única, no nula y obligatoria. Cómo máximo podemos definir una clave
        primaria por tabla.
    •   Esta clave primaria puede ser referenciada por una columna o columnas de otra
        tabla. Esto será llamado clave ajena en la otra tabla.
    •   Cuando se crea una clave primaria automáticamente se crea un índice que facilita
        el acceso a esa tabla.
    •   Para definir una clave primaria en una tabla usaremos la definición PRIMARY
        KEY.

    Formatos de la orden CREATE TABLE para definir las claves primarias:

    •   Sintáxis 1: Formato de restricción de columna

    CREATE TABLE nombre_tabla(
    Columna1 TIPO_DE_DATO (CONSTRAINT nombre_restricción) PRIMARY KEY,
    Columna2 TIPO_DE_DATO
    ........
    ) [TABLESPACE espacio_de_tabla];


    •   Sintáxis 2: Formato de restricción de tabla
    CREATE TABLE nombre_tabla(
    Columna1 TIPO_DE_DATO
     Columna2 TIPO_DE_DATO
    ........
           [CONSTRAINT nombre_restricción) PRIMARY KEY (columna [,columna]),
    ........
    ) [TABLESPACE espacio_de_tabla];



    Veamos un ejemplo:


Prácticas de Diseño y Gestión de Bases de Datos                                Page 9 of 23
Formación 2002. Tema 3.      Lenguaje de Definición de Datos (DDL)


    Supongamos que tenemos la tabla BLOQUEPISOS.

      NOMBRE COLUMNA                             Representa               Tipo
      CALLE                              Calle donde está el bloque   VARCHAR2(30)
      NUMERO                             Número del bloque            NUMBER(3)
      PISO                               Número de planta             NUMBER(2)
      PUERTA                             Puerta                       CHAR(1)
      CODIGO_POSTAL                      Código Postal                NUMBER(5)
      METROS                             Metros de la vivienda        NUMBER(5)
      COMENTARIOS                        Otros datos de la vivienda   VARCHAR2(60)
      COD_ZONA                           Código de zona del bloque    NUMBER(2)
      DNI                                DNI del propietario          VARCHAR2(10)

    La clave primaria estará formada por las columnas Calle, Número, Piso y Puerta. Por
    tanto no puden contener valores nulos. Se puede crear de la siguiente forma:

    Vamos a crear el siguiente ejemplo usando la restricción de tabla

    Ejemplo restriccion1

    SQL> CREATE TABLE BLOQUEPISOS
    (
       CALLE VARCHAR2(30) NOT NULL,
       NUMERO NUMBER(3) NOT NULL,
       PISO NUMBER(2) NOT NULL,
       PUERTA CHAR(1) NOT NULL,
       CODIGO_POSTAL NUMBER(5),
       METROS NUMBER(5),
       COMENTARIOS VARCHAR2(60),
       COD_ZONA NUMBER(2),
       DNI VARCHAR2(10),
       CONSTRAINT pk_viv PRIMARY KEY (calle, numero, piso, puerta)
    );
    Ahora borramos la tabla con la orden DROP que veremos mas adelante.
    SQL> DROP TABLE BLOQUEPISOS;
    Table dropped

    Y la creamos de la siguente forma (Fichero restriccion2)
    SQL>CREATE TABLE BLOQUEPISOS
    (
    CALLE VARCHAR2(30) NOT NULL,
    NUMERO NUMBER(3) NOT NULL,
    PISO NUMBER(2) NOT NULL,
    PUERTA CHAR(1) NOT NULL,
    CODIGO_POSTAL NUMBER(5),
    METROS NUMBER(5),
    COMENTARIOS VARCHAR2(60),
    COD_ZONA NUMBER(2),
    DNI VARCHAR2(10),
    PRIMARY KEY (calle, numero, piso, puerta)
    );

    SQL> DROP TABLE BLOQUEPISOS;

Prácticas de Diseño y Gestión de Bases de Datos                             Page 10 of 23
Formación 2002. Tema 3.       Lenguaje de Definición de Datos (DDL)



Suponga mos ahora que tenemos la tabla siguiente llamada ZONAS:

 NOMBRE COLUMNA                               Representa              Tipo
COD_ZONA                              Código de la zona        NUMBER(3)
NOMBREZONA                            Nombre de la zona        VARCHAR2(20)
MASDATOS                              Otros datos de la zona   VARCHAR2(50)

La clave primaria es el código de zona y la definimos formando parte de la columna
(Restricción de columna)

Fichero zonas

SQL>CREATE TABLE ZONAS
(
COD_ZONAS NUMBER(3) PRIMARY KEY,
NOMBREZONA VARCHAR2(15) NOT NULL,
MASDATOS VARCHAR2(60)
);

SQL> DROP TABLE ZONAS;

Si en una tabla forman parte de la clave primaria varias columnas, ésta no se puede
definir como restricción de columna. No podríamos hacer lo siguiente:

    SQL> CREATE TABLE BLOQUEPISOS
    (
       CALLE VARCHAR2(30) PRIMARY KEY,
       NUMERO NUMBER(3) PRIMARY KEY,
       PISO NUMBER(2) PRIMARY KEY,
       PUERTA CHAR(1) PRIMARY KEY,
       CODIGO_POSTAL NUMBER(5),
       METROS NUMBER(5),
       COMENTARIOS VARCHAR2(60),
       COD_ZONA NUMBER(2),
       DNI VARCHAR2(10),
    );

    NUMERO NUMBER(3) PRIMARY KEY,
                                *
    ERROR en línea 4:
    ORA-02260: la tabla sólo puede tener una clave primaria

1.1.1.2. Restricción FOREIGN KEY.

    •   Una clave ajena está formada por una o varias columnas que están asociadas a una
        clave primaria de otra o de la misma tabla.
    •   Se pueden definir tantas claves ajenas como sea necesario, y pueden estar en la
        misma tabla que la clave primaria.
    •   El valor de la columna o columnas que son claves ajenas debe ser:
            o NULL
            o O igual a un valor de la clave referenciada (Integridad referencial).

Prácticas de Diseño y Gestión de Bases de Datos                           Page 11 of 23
Formación 2002. Tema 3.       Lenguaje de Definición de Datos (DDL)


    •    Para entender el significado de claves primarias y claves ajenas veamos el
         siguiente gráfico:




En estas tablas tenemos:
   • Clave primaria de la tabla PERSONAS: DNI.
   • Clave primaria de la tabla PROVINCIAS: COD_PROV.
   • Clave ajena en la tabla PERSONAS: COD_PROV.

Esto implica que las tablas PERSONAS y PROVINCIAS están relacionadas a través del
atributo COD_PROV.

Vamos a crear estas dos tablas con sus relaciones.

Fichero ajenas.

CREATE TABLE PROVINCIAS (
       COD_PROV NUMBER(2) PRIMARY KEY,
       NOM_PROV VARCHAR2(15)
);

CREATE TABLE PERSONAS (
       DNI NUMBER(8) PRIMARY KEY,
       NOMBRE         VARCHAR2(15),
       DIRECCION      VARCHAR2(25),
       POBLACION      VARCHAR2(20),
       COD_PROV       NUMBER(2) NOT NULL REFERENCES PROVINCIAS
);

Si ahora intentamos borrar la tabla PROVINCIAS:

SQL> DROP TABLE PROVINCIAS;
DROP TABLE PROVINCIAS
     *
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys


    •    Tenemos que crear primero la tabla PROVINCIAS y luego la tabla PERSONAS,
         ya que la segunda tabla hace referencia a la primera tabla .
    •    Si queremos borrar las tablas, comenzaremos borrando la tabla PERSONAS, y
         después, la tabla PROVINCIAS. Si intentamos hacerlo al revés se emitirá un
         mensaje como el de arriba.

Prácticas de Diseño y Gestión de Bases de Datos                             Page 12 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


    SQL> DROP TABLE PERSONAS;
    Table dropped.
    SQL> DROP TABLE PROVINCIAS;
    Table dropped.


    Formatos de la orden CREATE TABLE para definir las claves ajenas:

    •   Sintáxis 1: Formato de restricción de columna

    CREATE TABLE nombre_tabla
        columna1 TIPO_DE_DATO
                  [CONSTRAINT nombre_restricción]
                  REFERENCES nombre_tabla2 [(columna)] [ON DELETE CASCADE]
        .........
        columna2 TIPO_DE_DATO
        ........
    ) [TABLESPACE espacio_de_tabla];

    •   Sintáxis 2: Formato de restricción de tabla

    CREATE TABLE nombre_tabla
        columna1 TIPO_DE_DATO
        columna2 TIPO_DE_DATO
        ..................
        [CONSTRAINT nombre_restricción]
        FOREIGN KEY (columna [, columna])
                    REFERENCES nombre_tabla2 [(columna [,columna])]
                    [ON DELETE CASCADE]
        .........
    ) [TABLESPACE espacio_de_tabla];

Si lo que deseamos es borrar alguna provincia de la tabla PROVINCIAS, y que las filas
correspondientes de la tabla PERSONAS con esa provincia sean eliminadas, se añadirá la
cláusula ON DELETE CASCADE en la opción REFERENCES:

Fichero cascada
CREATE TABLE PROVINCIAS (
       COD_PROV NUMBER(2) PRIMARY KEY,
       NOM_PROV VARCHAR2(15)
);

CREATE TABLE PERSONAS (
       DNI NUMBER(8) PRIMARY KEY,
       NOMBRE         VARCHAR2(15),
       DIRECCION      VARCHAR2(25),
       POBLACION      VARCHAR2(20),
       COD_PROV       NUMBER(2) NOT NULL,
       FOREIGN KEY (COD_PROV) REFERENCES PROVINCIAS
               ON DELETE CASCADE
);


Prácticas de Diseño y Gestión de Bases de Datos                         Page 13 of 23
Formación 2002. Tema 3.      Lenguaje de Definición de Datos (DDL)



SQL> DROP TABLE PERSONAS;
Table dropped

SQL> DROP TABLE PROVINCIAS;
Table dropped


    •    En los ejemplos anteriores al definir las restricciones de claves primarias y ajenas
         no hemos dado nombre (excepto en el ejemplo restriccion1).
    •    Por defecto Oracle asigna un nombre de restricción SYS_C00n, donde ‘n’ es un
         número asignado automáticamente por Oracle.
    •    Cuando una restricción es violada Oracle emite un mensaje de error. El mesaje de
         error es algo parecido a lo siguiente:
             ERROR en línea 1:
             ORA-00001: restricción única (Valor.SYS_C00679) violada.

             Valor es el contenido de un campo.

A continuación vamos a crear las restricciones dándole nombres:

Fichero restrinombre
CREATE TABLE PROVINCIAS (
       COD_PROV NUMBER(2)
               CONSTRAINT PK_PROV PRIMARY KEY,
       NOM_PROV VARCHAR2(15)
);

CREATE TABLE PERSONAS (
       DNI NUMBER(8)
               CONSTRAINT PK_PER PRIMARY KEY,
       NOMBRE         VARCHAR2(15),
       DIRECCION      VARCHAR2(25),
       POBLACION      VARCHAR2(20),
       COD_PROV       NUMBER(2) NOT NULL,
               CONSTRAINT FK_PER FOREIGN KEY (COD_PROV) REFERENCES PROVINCIAS
               ON DELETE CASCADE
);


PK_PROV: Nombre de la restriccion de Primary Key en PROVEEDORE.
PK_PER: Nombre de la restriccion de Primary Key en PERSONAS.
FK_PER: Nombre de la restriccion de Foreign Key en PERSONAS

SQL> DROP TABLE PERSONAS;

Table dropped.

SQL> DROP TABLE PROVINCIAS;

Table dropped.




Prácticas de Diseño y Gestión de Bases de Datos                               Page 14 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


Especificación DEFAULT

    •   En el momento de crear una tabla podemos designar valores por defecto en las
        columnas.
    •   Si especificamos la cláusula DEFAULT a una columna, le proporcionamos un
        valor por omisión cuando el valor de la columna no se especifica en la cláusula
        INSERT.
    •   INSERT es la cláusula de inserción de datos.
    •   En la cláusula DEFAULT es posible incluir varias expresiones: constantes,
        funciones SQL y variables UID y SYSDATE.

    Veamos algunos ejemplos.

    •   Creemos la tabla EJEMPLO1 y se le asigna a la columna FECHA la fecha del
        sistema.

    Fichero ejemplo1

    SQL>CREATE TABLE EJEMPLO1 (
         DNI          VARCHAR2(10) NOT NULL,
         NOMBRE       VARCHAR2(30) NOT NULL,
         EDAD         NUMBER(2),
        FECHA         DATE DEFAULT SYSDATE
    );
    Table created

    SQL> DROP TABLE EJEMPLO1;
    Table dropped


    •   Cuando vayamos a insertar valores de una fila en la tabla no es necesario insertar
        el valor de la columna FECHA, ya que tomará por defecto la fecha del día.

    Vamos a crear la tabla EJEMPLO2 y asignamos por defecto a la columna NOMBRE
    la cadena ‘No definido’ y a la columna USUARIO, el número identificativo del
    usuario.

    Fichero ejemplo2
    SQL> CREATE TABLE EJEMPLO2 (
              DNI     VARCHAR2(10) NOT NULL,
              NOMBRE         VARCHAR2(30) DEFAULT 'No definido',
              USUARIO        NUMBER DEFAULT UID);




Prácticas de Diseño y Gestión de Bases de Datos                            Page 15 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


1.1.1.3. Restricción CHECK.

    •   Muchas columnas de tablas requieren valores limitados dentro de un rango o el
        cumplimiento de ciertas condiciones.
    •   Con una restricción de verificación de condiciones se puede expresar una
        condición que ha de cumplirse para todas y cada una de las filas de la tabla.
    •   La restricción CHECK actúa como la cláusula WHERE.
    •   En la cláusula CHECK no cabe incluir subconsultas ni las pseudocolumnas
        SYSDATE, UID, USER.

    •   Sintáxis 1: Formato de restricción de columna

    CREATE TABLE nombre_tabla
        columna1 TIPO_DE_DATO
                  [CONSTRAINT nombre_restricción] CHECK (condición),
        .........
        columna2 TIPO_DE_DATO
        ........
    ) [TABLESPACE espacio_de_tabla];


    •   Sintáxis 2: Formato de restricción de tabla

    CREATE TABLE nombre_tabla
        columna1 TIPO_DE_DATO
        columna2 TIPO_DE_DATO
        ..................
        [CONSTRAINT nombre_restricción] CHECK (condición)
        .........
    ) [TABLESPACE espacio_de_tabla];

Ejemplos.

Se desea crear la tabla EJEMPLOS, cuyas columnas y restricciones son:

                                 Columna           Tipo de Dato
                                DNI               VARCHAR2(10)
                                NOMBRE            VARCHAR2(30)
                                EDAD              NUMBER(2)
                                CURSO             NUMBER

Condiciones:
   a) DNI no puede ser nulo.
   b) La clave primaria es el DNI.
   c) El NOMBRE no puede ser nulo.

Prácticas de Diseño y Gestión de Bases de Datos                          Page 16 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


    d) La EDAD ha de estar comprend ida entre 5 y 20 años.
    e) El NOMBRE ha de estar en mayúsculas.
    f) El CURSO sólo puede almacenar1,2, ó 3.


    SQL>CREATE TABLE EJEMPLO
    (
       DNI            VARCHAR2(10) NOT NULL,
       NOMBRE         VARCHAR2(30) NOT NULL,
       EDAD           NUMBER(2),
       CURSO          NUMBER,
              CONSTRAINT CLAVE_P   PRIMARY KEY(DNI),
              CONSTRAINT COMP_EDAD        CHECK (EDAD BETWEEN 5 AND 20),
              CONSTRAINT NOMBRE_MAYUS     CHECK (NOMBRE=UPPER(NOMBRE)),
              CONSTRAINT COMP_CURSO       CHECK (CURSO IN(1,2,3))
    );



1.1.1.4. Restricción UNIQUE.

    •   La restricción UNIQUE evita valores repetidos en la misma columna. Puede
        contener una o varias columnas
    •   Es similar a la restricción PRIMARY KEY, salvo que son posibles varias
        columnas UNIQUE definidas en una tabla.
    •   Admite valores NULL.
    •   Al igual que con PRIMARY KEY, cuando se define la restricción UNIQUE se
        crea un índice automáticamente.

    •   Sintáxis 1: Formato de restricción de columna

    CREATE TABLE nombre_tabla
        columna1 TIPO_DE_DATO
                  [CONSTRAINT nombre_restricción] UNIQUE,
        .........
        columna2 TIPO_DE_DATO
        ........
    ) [TABLESPACE espacio_de_tabla];


    •   Sintáxis 2: Formato de restricción de tabla

    CREATE TABLE nombre_tabla
        columna1 TIPO_DE_DATO
        columna2 TIPO_DE_DATO
        ..................
        [CONSTRAINT nombre_restricción] UNIQUE (columna[, columna]),
        .........
    ) [TABLESPACE espacio_de_tabla];

Prácticas de Diseño y Gestión de Bases de Datos                      Page 17 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


2.       ALTER TABLE.

2.1.     ADICIÓN DE UNA COLUMNA A UNA TABLA

Las tablas se pueden modificar de dos formas:
   a) Cambiando la definición de una columna (MODIFY).
   b) Añadiendo una columna a una tabla existente (ADD).
Sintáxis

ALTER TABLE nombre_tabla ADD
(columna tipo_dato [, columna tipo_datos]);

     •   Un error típico es intentar añadir una columna con la restricción NOT NULL. Si
         la tabla está vacía no hay problemas, pero si no es así no podremos poner la
         restricción NOT NULL.
     •   Una solución a esto es crear la columna sin poner la restricciones, y luego
         actualizar las filas correspondientes de la tabla. Se realizará con la sentencia
         UPDATE que veremos más adelante.

2.2.     MODIFICACIÓN DE LA DEFINICIÓN DE UNA COLUMNA.

La modificación de un campo de una tabla puede ser debido a:
   a) Deseemos incrementar la anchura.
   b) Deseemos especificar una anchura o mascara para opciones numéricas
   c) Si una columna contiene valores, podemos modificar su definición y que sea NOT
      NULL.
   d) Si queremos acortar una columna, tiene que estar libre de datos. Hay que hacer
      estas modificaciones cuando no hay datos en la columna especificada.
   e) Para cambiar el tipo de datos también tiene que estar vacía.

Sintáxis

ALTER TABLE nombre_tabla
MODIFY (columna, …);


RESUMEN DE ALTER TABLE

   • La sintáxis de ALTER TABLE es la siguiente:
Sintáxis

ALTER TABLE nombre_tabla
{[ADD (columna [,columna]...)]
[MODIFY (columna [,columna]....)]
[ADD CONSTRAINT restricción]
[DROP CONSTRAINT restricción]);

Prácticas de Diseño y Gestión de Bases de Datos                            Page 18 of 23
Formación 2002. Tema 3.       Lenguaje de Definición de Datos (DDL)


    •    ADD añade una columna o más al final de la tabla.
    •    MODIFY modifica una o más columnas existentes en la tabla.
    •    ADD CONSTRAINT añade una restricción a la definición de la tabla.
    •    DROP CONSTRAINT elimina una restricción de la tabla.

Veamos algunos ejemplos.

    •    Añadir a la tabla ejemplo dos columnas SEXO e IMPORTE. La descripción de la
         tabla ejemplo es la siguiente:

    SQL> DESC EJEMPLO;

    Name                             Null?             Type

    DNI                              NOT NULL          VARCHAR2(10)
    NOMBRE                           NOT NULL          VARCHAR2(30)
    EDAD                                               NUMBER(2)
    CURSO                                              NUMBER



Para añadir esas dos columnas a la tabla usamos la orden ADD.

SQL > ALTER TABLE EJEMPLO ADD (SEXO CHAR(1), IMPORTE NUMBER(4));
Tabla modificada.

SQL> DESC EJEMPLO;

    Name                             Null?             Type

    DNI                              NOT NULL          VARCHAR2(10)
    NOMBRE                           NOT NULL          VARCHAR2(30)
    EDAD                                               NUMBER(2)
    CURSO                                              NUMBER
    SEXO                                               CHAR(1)
    IMPORTE                                            NUMBER(4)



Si hubiesemos querido añadir la restricción NOT NULL a la columna SEXO hubiesemos
escrito:
SQL > ALTER TABLE EJEMPLO ADD (SEXO CHAR(1) NOT NULL, IMPORTE NUMBER(4));


Esto nos podría dar el siguiente error:

ALTER TABLE EJEMPLO ADD(
              *

ERROR en línea 1:
ORA-01758: La tabla debe estar vacía para añadir columna (NOT NULL) obligatoria.

Este error ha aparecido porque la tabla EJEMPLO ya contiene datos.
La solución pasaría por usar la orden ALTER TABLE sin el NOT NULL, y luego
haciendo un UPDATE de esa columna.

Prácticas de Diseño y Gestión de Bases de Datos                                    Page 19 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


SQL> ALTER TABLE EJEMPLO ADD (SEXO CHAR(1), IMPORTE NUMBER(4));
Tabla modificada.

SQL> UPDATE EJEMPLO SET SEXO=’X’;

Esta segunda orden la veremos más adelante. Para entender ahora qué es lo que hace
internamente es “actualizar todas las filas de la tabla de la columna SEXO con la letra
‘X’. En el siguiente gráfico podemos ver qué actualiza.

     DNI            NOMBRE            EDAD           CURSO       SEXO         IMPORTE
                                                                   X
                                                                   X
                                                                   X


A continuación vamos a modificar la tabla con la orden MODIFY y se cambia la
definición de la columna a NOT NULL:

SQL> ALTER TABLE EJEMPLO MODIFY(
       SEXO CHAR(1) NOT NULL,
       IMPORTE NUMBER(4)
       );

Tabla modificada.

SQL> DESC EJEMPLO;

    Name                         Null?            Type

    DNI                          NOT NULL         VARCHAR2(10)
    NOMBRE                       NOT NULL         VARCHAR2(30)
    EDAD                                          NUMBER(2)
    CURSO                                         NUMBER
    SEXO                         NOT NULL         CHAR(1)
    IMPORTE                                       NUMBER(4)


En definitiva, a la hora de añadir una columna a una tabla hay que tener en cuenta varios
factores:
    a) Si la columna no está definida como NOT NULL, se le puede añadir en cualquier
       momento.
    b) Si la columna está definida como NOT NULL puede ocurrir 2 situaciones:
            a. Que la tabla esté vacía, en cuyo caso no hay problema.
            b. Que la tabla no esté vacía, entonces:
                     i. Definirla sin NOT NULL.
                    ii. Actualizar las filas correspondientes.
                   iii. Modificar la columna a NOT NULL.




Prácticas de Diseño y Gestión de Bases de Datos                            Page 20 of 23
Formación 2002. Tema 3.        Lenguaje de Definición de Datos (DDL)


A continuación vamos a modificar la longitud de la columna NOMBRE de la tabla
ejemplo. Tambié n vamos a dar una longitud 3 y, por defecto, se asigna 0 al IMPORTE.

SQL> ALTER TABLE EJEMPLO MODIFY (
       NOMBRE VARCHAR2(3),
       IMPORTE DEFAULT 0);

Dará el siguiente error:
NOMBRE VARCHAR2(3),
*
ERROR en línea 2:
ORA-01441: La columna a modificar debe estar vacía para disminuir la longitud de la columna.

Si ahora escribimos:
SQL>ALTER TABLE EJEMPLO MODIFY (NOMBRE VARCHAR2(35));
Tabla modificada.

Al modificar una columna de una tabla se han de tener en cuenta estos aspectos:

-   Se puede aumentar la longitiud de una columna en cualquier momento.
-   Es posible aumentar o disminuir el número de posicio nes decimales en una columna
    de tipo NUMBER.
-   Si la columna es NULL en todas las filas de la tabla, se puede disminuir la longitud y
    modificar el tipo de dato.
-   La opción MODIFY...NOT NULL sólo será posible cuando la tabla no contenga
    ninguna fila con valor nulo en la columna que se modifica.


2.2.1. AÑADIR RESTRICCIONES.

Con la orden ALTER TABLE se pueden añadir restricciones a una TABLA.
Sintáxis:

ALTER TABLE nombre_tabla
ADD CONSTRAINT nombreconstraint

Veamos algunos ejemplos.
Añadimos APELLIDO único a la tabla EMPLE:

SQL> ALTER TABLE EMPLE ADD CONSTRAINT APELLIDO_UQ UNIQUE(apellido);
Tabla modificada.

Añadimos la restricción de COMISION no nula a la tabla EMPLE:

SQL> ALTER TABLE EMPLE ADD CONSTRAINT COMI_NONULA CHECK(COMISION IS NOT NULL);

         check(COMISION IS NOT NULL)
                 *
         ERROR en línea 3:
         ORA-02293: no se ha podido activar (MAJESUS.COMI_NONULA) – compruebe restricción de violada



Prácticas de Diseño y Gestión de Bases de Datos                                                Page 21 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


Este error es debido a que la columna COMISION es nula en muchas filas de la tabla.
Para añadir la restricción es necesario dar valores a todas las filas de la tabla.


Para ver las restricciones creadas tenemos que seleccionar la columna
CONSTRAINT_NAME de la tabla USER_CONSTRAINTS

SQL> SELECT CONSTRAINT_NAME FROM USER_COSNTRAINTS WHERE TABLE_NAME=’EMPLE’;



2.2.2. BORRADO DE RESTRICCIONES.

Sintáxis

ALTER TABLE nombre_tabla
DROP CONSTRAINT nombre_constraint...;
                Nombre_restricción;

Ejemplo: Borrar la restricción APELLIDO_UQ de la tabla EMPLE.

SQL> ALTER TABLE EMPLE DROP CONSTRAINT APELLIDO_UQ;
Tabla modificada.


CREACIÓN DE TABLAS CON DATOS RECUPERADOS DE UNA CONSULTA.

•      La sentencia CREATE TABLE permite crear una tabla a partir de la consulta de
       otra tabla existente.
Sintáxis
       CREATE TABLE nombre_tabla
       (
       .....
       )
       [TABLESPACE espacio_de_tabla]
       AS consulta;

Ejemplo.

SQL> CREATE TABLE EJEMPLO_AS SELECT * FROM EJEMPLO;

•       No es necesario especificar tipos ni tamaño de las columnas, ya que vienen
        determinados por los tipos y tamaños de las recuperadas en la consulta.




Prácticas de Diseño y Gestión de Bases de Datos                           Page 22 of 23
Formación 2002. Tema 3.    Lenguaje de Definición de Datos (DDL)


3.      BORRADO DE TABLAS.

3.1.    DROP TABLE.

•    La orden DROP TABLE suprime una tabla de la base de datos.
•    Cada usuario puede borrar sus propias tablas.
•    Sólo el administrador de la base de datos o algún usario con el privilegio DROP
     ANY TABLE puede borrar las tablas de otro usuario,
•    Al suprimir una tabla también se suprimen los índices y los pirvilegios asociados a
     ella.
•    Las vistas y los sinónimos creados a partir de esa tabla dejan de funcionar, pero
     siguen existiendo en la base de datos, por lo que habría que eliminarlos.
•    Sintáxis:
     DROP TABLE [usuario].nombre_table [CASCADE CONSTRAINTS];

3.2.    TRUNCATE TABLE.

•    La orden TRUNCATE permite suprimir todas las filas de una tabla y liberar el epacio
     ocupado para otros usos sin que desaparezca la definición de la tabla de la base de
     datos.
•    La eliminación de filas con la orden TRUNCATE es más rápida que con DELETE.
•    Sintáxis:
     TRUNCATE TABLE [usuario.]nombre_table [{DROP|REUSE} STORAGE];

•    No se puede truncar una tabla cuya clave primaria sera referenciada por la clave ajena
     de otra tabla. Antes de truncar la tabla hay que desactivar la restricción. (Ejemplo de
     la tabla PROVINCIAS vista anteriormente).




Prácticas de Diseño y Gestión de Bases de Datos                             Page 23 of 23

Weitere ähnliche Inhalte

Was ist angesagt?

Comandos utilizados en sql
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sql
Byron Eras
 
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
Sergio Sanchez
 
Sql – Structured Query Language
Sql – Structured Query LanguageSql – Structured Query Language
Sql – Structured Query Language
pandey3045_bit
 
Unidad 6 Lenguaje Sql 2
Unidad 6 Lenguaje Sql 2Unidad 6 Lenguaje Sql 2
Unidad 6 Lenguaje Sql 2
Sergio Sanchez
 

Was ist angesagt? (20)

MySql slides (ppt)
MySql slides (ppt)MySql slides (ppt)
MySql slides (ppt)
 
Implementacion de bases de datos en mysql
Implementacion de bases de datos en mysqlImplementacion de bases de datos en mysql
Implementacion de bases de datos en mysql
 
Comandos utilizados en sql
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sql
 
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
Unidad 6 Lenguaje Sql 3 (Restricciones Ddl Avanzado)
 
Sql presentacion
Sql presentacionSql presentacion
Sql presentacion
 
Mysql
MysqlMysql
Mysql
 
Sql commands
Sql commandsSql commands
Sql commands
 
MySQL for beginners
MySQL for beginnersMySQL for beginners
MySQL for beginners
 
Structured Query Language (SQL)
Structured Query Language (SQL)Structured Query Language (SQL)
Structured Query Language (SQL)
 
Funciones en SQL SERVER
Funciones en SQL SERVERFunciones en SQL SERVER
Funciones en SQL SERVER
 
SQL Queries
SQL QueriesSQL Queries
SQL Queries
 
COMANDOS DDL
COMANDOS DDLCOMANDOS DDL
COMANDOS DDL
 
Basic sql Commands
Basic sql CommandsBasic sql Commands
Basic sql Commands
 
Sql(structured query language)
Sql(structured query language)Sql(structured query language)
Sql(structured query language)
 
Sql – Structured Query Language
Sql – Structured Query LanguageSql – Structured Query Language
Sql – Structured Query Language
 
Db2 tutorial
Db2 tutorialDb2 tutorial
Db2 tutorial
 
Sql tutorial
Sql tutorialSql tutorial
Sql tutorial
 
Diapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base DatosDiapositivas De Tablas y Base Datos
Diapositivas De Tablas y Base Datos
 
Presentation slides of Sequence Query Language (SQL)
Presentation slides of Sequence Query Language (SQL)Presentation slides of Sequence Query Language (SQL)
Presentation slides of Sequence Query Language (SQL)
 
Unidad 6 Lenguaje Sql 2
Unidad 6 Lenguaje Sql 2Unidad 6 Lenguaje Sql 2
Unidad 6 Lenguaje Sql 2
 

Andere mochten auch

Vistas En Sql Y My Sql
Vistas En Sql Y My SqlVistas En Sql Y My Sql
Vistas En Sql Y My Sql
Ziscko
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
Gerardo
 
Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2
Carmen Soler
 
Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7
Mario Alfonso
 
Fichas bibliográficas: APA
Fichas bibliográficas: APAFichas bibliográficas: APA
Fichas bibliográficas: APA
UPAEP
 

Andere mochten auch (19)

DDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datosDDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datos
 
SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...
SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...
SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...
 
Utilizando DDL SQL oracle Z051 Cap 11
Utilizando DDL SQL oracle Z051 Cap 11Utilizando DDL SQL oracle Z051 Cap 11
Utilizando DDL SQL oracle Z051 Cap 11
 
Manual de instalacion_oracle_11g_r2
Manual de instalacion_oracle_11g_r2Manual de instalacion_oracle_11g_r2
Manual de instalacion_oracle_11g_r2
 
Oracle 11g concept
Oracle 11g conceptOracle 11g concept
Oracle 11g concept
 
Preparación certificaciones oracle 11g
Preparación certificaciones oracle 11gPreparación certificaciones oracle 11g
Preparación certificaciones oracle 11g
 
Vistas En Sql Y My Sql
Vistas En Sql Y My SqlVistas En Sql Y My Sql
Vistas En Sql Y My Sql
 
Instalar oracle database 11g r2
Instalar oracle database 11g r2Instalar oracle database 11g r2
Instalar oracle database 11g r2
 
Vistas en bases de datos
Vistas en bases de datosVistas en bases de datos
Vistas en bases de datos
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
 
Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2Arquitectura de Oracle 11g r2
Arquitectura de Oracle 11g r2
 
Administracion de Base de Datos Oracle
Administracion de Base de Datos OracleAdministracion de Base de Datos Oracle
Administracion de Base de Datos Oracle
 
Oracle Architecture
Oracle ArchitectureOracle Architecture
Oracle Architecture
 
Base de Dato Oracle
Base de Dato OracleBase de Dato Oracle
Base de Dato Oracle
 
Instalar Oracle 11g R2 CentOS 6.4
Instalar Oracle 11g R2 CentOS 6.4Instalar Oracle 11g R2 CentOS 6.4
Instalar Oracle 11g R2 CentOS 6.4
 
Manual sql server parte 1
Manual sql server parte 1Manual sql server parte 1
Manual sql server parte 1
 
Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7Manual de instalacion de Oracle - Windows 7
Manual de instalacion de Oracle - Windows 7
 
Instalación de OracleXE 11g Windows
Instalación de OracleXE 11g WindowsInstalación de OracleXE 11g Windows
Instalación de OracleXE 11g Windows
 
Fichas bibliográficas: APA
Fichas bibliográficas: APAFichas bibliográficas: APA
Fichas bibliográficas: APA
 

Ähnlich wie DDL oracle - base de datos

Tipos de datos. Ejercicios en SQL Server
Tipos de datos. Ejercicios en SQL ServerTipos de datos. Ejercicios en SQL Server
Tipos de datos. Ejercicios en SQL Server
jcalvopa
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
guest0c9485
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
guest0c9485
 
Tutorial de Access
Tutorial de AccessTutorial de Access
Tutorial de Access
caro_sofi
 

Ähnlich wie DDL oracle - base de datos (20)

BD cap 5 SQL.pdf
BD cap 5  SQL.pdfBD cap 5  SQL.pdf
BD cap 5 SQL.pdf
 
DDL
DDLDDL
DDL
 
04-SQL.pdf
04-SQL.pdf04-SQL.pdf
04-SQL.pdf
 
04-SQLBuenaPresentaciónyConceptos.pdf
04-SQLBuenaPresentaciónyConceptos.pdf04-SQLBuenaPresentaciónyConceptos.pdf
04-SQLBuenaPresentaciónyConceptos.pdf
 
Tablas y tipos de datos
Tablas y tipos de datosTablas y tipos de datos
Tablas y tipos de datos
 
Tipos de datos. Ejercicios en SQL Server
Tipos de datos. Ejercicios en SQL ServerTipos de datos. Ejercicios en SQL Server
Tipos de datos. Ejercicios en SQL Server
 
Unidad 6 Lenguaje Sql
Unidad 6 Lenguaje SqlUnidad 6 Lenguaje Sql
Unidad 6 Lenguaje Sql
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Modificaciones De Ansi Sql
Modificaciones De Ansi SqlModificaciones De Ansi Sql
Modificaciones De Ansi Sql
 
Fundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sqlFundamentos de BD - Unidad 6 lenguaje sql
Fundamentos de BD - Unidad 6 lenguaje sql
 
Taba y tipos de datos
Taba y tipos de datosTaba y tipos de datos
Taba y tipos de datos
 
Tp Access2
Tp Access2Tp Access2
Tp Access2
 
Tp Access2
Tp Access2Tp Access2
Tp Access2
 
Tp Access2
Tp Access2Tp Access2
Tp Access2
 
Tutorial de Access
Tutorial de AccessTutorial de Access
Tutorial de Access
 
Guía de Sql - Lissette Torrealba
Guía de Sql  - Lissette TorrealbaGuía de Sql  - Lissette Torrealba
Guía de Sql - Lissette Torrealba
 
Unidad IV SQL
Unidad IV SQLUnidad IV SQL
Unidad IV SQL
 
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptxOVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
 
Tipos de datos. Ejercicios en SQLServer
Tipos de datos. Ejercicios en SQLServerTipos de datos. Ejercicios en SQLServer
Tipos de datos. Ejercicios en SQLServer
 
Expocicion sabado
Expocicion sabadoExpocicion sabado
Expocicion sabado
 

DDL oracle - base de datos

  • 1. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) TEMA 3 LENGUAJE DE DEFINICIÓN DE DATOS (DDL) 1. Creación de tablas. 2. Modificación de tablas. 3. Borrado de tablas. Prácticas de Diseño y Gestión de Bases de Datos Page 1 of 23
  • 2. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) El lenguaje de definición de datos en SQL según vimos en el tema anterior se divide en los siguientes comandos: • CREATE TABLE • ALTER TABLE • DROP TABLE. 1. CREACIÓN DE UNA TABLA. Una tabla se crea con la orden CREATE TABLE. La sintáxis del comando CREATE TABLE es una sintáxis reducida del comando. Luego veremos la sintáxis completa del comando CREATE TABLE. Por ahora para crear una tabla tenemos suficiente con la siguiente. Sintáxis CREATE TABLE nombre_tabla (nombre_columna tipo_dato [longitud][NOT NULL], nombre_columna tipo_dato [longitude][NOT NULL], …) [TABLESPACE espacio_de_tabla}; Con esto creamos la tabla dentro de nuestra base, le damos un nombre, y creamos su estructura. Sólo queda introducer los datos. Una vez que la tabla está creada su definición queda en el diccionario de datos. a) Nombre de tabla • Un nombre de tabla tiene una longitude maxima. • Su nombre tiene que ser diferente a cualquier otra tabla o vista de la base de de datos. • El nombre de la tabla nunca podrá ser una palabra reservada de la base de datos. • Puede ser mayúsculas o minúsculas, es indiferente. b) Definición de columnas Cada columna de una tabla tendrá lo siguiente: • Nombre del campo dentro de una tabla. • Tipo de dato, con su longitude si es que procede y NOT NULL si ninca puede estar vacío. Prácticas de Diseño y Gestión de Bases de Datos Page 2 of 23
  • 3. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) • La definición de cada columna va separada por ‘,’. • El nombre de campo sigue las mismas reglas que el nombre de tabla, pero las columnas pueden tener el mismo nombre si son tables distintas. • Se pueden definer como máximo 254 columnas. • Las claves primarias se deben definir como NOT NULL. c) Reglas para la definición de los nombres • Nombres únicos. Los nombres de las tables no pueden repetirse en una misma base de datos. No pueden coincidir con una palabra clave. • Caracteres. El primer caracter tiene que ser una letra. El resto de caracteres es libre, pero sin ‘,’. El máximo es 30. Según la sintáxis anterior vamos a crear las tablas en SQL*PLUS. ESTRUCTURA DE NUESTRA BASE DE DATOS • Ha llegado la hora de saber cómo va a estar organizada nuestra base de datos. • Aunque al principio el siseño pueda parecer un poco complejo, veamos un gráfico representativo de nuestra base de datos. • Nuestra base de datos estará comprendida por las siguientes tablas: o Clientes o Tiendas o Proveedores o Articulos o Ventas Toda tabla tiene una clave primaria. La clave primaria es aquella que identifica a una sola tupla (fila) de esa tabla. Representaremos los campos que son clave primaria con el símbolo #. Prácticas de Diseño y Gestión de Bases de Datos Page 3 of 23
  • 4. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Tabla Clientes: #clt_num clt_apell clt_nom clt_pais clt_pob • La tabla clientes lleva un número de identificación único no vacío (la clave primaria clt_num), el apellido del cliente (clt_apell), su nombre (clt_nom), nacionalidad (clt_pais) y su ciudad (clt_pob). Tabla Tiendas: #tda_num tda_pob tda_ger • La tabla tiendas incluye un número de identificación único no vacío (la clave primaria tda_num), el área geográfica en que se encuentra la tienda (tda_pob), y el nombre del gerente (tda_ger). Prácticas de Diseño y Gestión de Bases de Datos Page 4 of 23
  • 5. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Tabla Proveedores: #prv_num prv_nom • Contiene un número de identificación único, que es la clave primaria (prv_num), y el nombre del proveedor (prv_nom). Existe un enlace funcional 1:N entre la tabla proveedores y la tabla artículos, a través del número de proveedor que aparece para cada artículo en la columna art_prv. Tabla Articulos: #art_num art_nom art_peso art_col art_pc art_pv art_prv • Tiene un número de identificación único, la clave primaria (art_num), y contiene además el nombre del artículo (art_nom), su peso (art_peso), su color (art_col), el precio de compra (art_pc), el precio de venta (art_pv) y el número de proveedor (art_prv), el cual hace de clave foránea para poderse relacionar con el número de proveedores de la tabla proveedores. Tabla Ventas: #vnt_clt #vnt_tda #vnt_art vnt_cant vnt_precio #vnt_fch • La tabla ventas es una tabla que crea dos enlaces, entre las tables tiendas y clients por un lado, y clients y artículos por otro, lo que permite el seguimiento de los artículos comprados por cada cliente y de las tiendas donde se efectuaron las adquisiciones. La columna vnt_clt contiene el número de cliente, la columna vnt_tda el número de tienda de adquisición y la comlumna vnt_art el número de artículo adquirido. De igual modo, se memoriza la cantidad (vnt_cant), el precio de venta (vnt_precio) y la fecha de venta (vnt_fch). Si un cliente compra varios artículos se introducen en esta tabla tantas filas como artículos se han adquirido. La clave primaria de la tabla se ha formado por la unión de cuatro claves foráneas, que son vnt_clt, vnt_tda, vnt_art y vnt_fch. Esto significa, que un cliente no va a comprar el mismo artículo en la misma tienda y en la misma fecha. Prácticas de Diseño y Gestión de Bases de Datos Page 5 of 23
  • 6. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) CREACIÓN DE LAS TABLAS DE NUESTRA BASE DE DATOS • Creación de la tabla ‘clientes’ CREATE TABLE clientes ( clt_num INTEGER NOT NULL PRIMARY KEY, clt_apell CHAR(10), clt_nom CHAR(10), clt_pais CHAR(1), clt_pob CHAR(10) ); La clave primaria de una tabla nunca puede estar vacía. Esto quiere decir que en la definición de una tabla, siempre tendremos que poner NOT NULL en el campo que es clave primaria. Las claves primarias serán aquellas que nos permitirán relaccionar las filas de una tabla con las filas de otra tabla. • Creación de la tabla ‘tiendas’ CREATE TABLE tiendas ( tda_num INTEGER NOT NULL PRIMARY KEY, tda_pob CHAR(15), tda_ger CHAR(25) ); • Creación de la tabla ‘proveedores’ CREATE TABLE proveedores ( prv_num integer NOT NULL PRIMARY KEY, prv_nom CHAR(25) ); • Creación de la tabla ‘articulos’ CREATE TABLE articulos ( art_num INTEGER NOT NULL PRIMARY KEY, art_nom CHAR(20), art_peso INTEGER, art_col CHAR(10), art_pc INTEGER, art_pv INTEGER, art_prv INTEGER ); Prácticas de Diseño y Gestión de Bases de Datos Page 6 of 23
  • 7. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) • Creación de la tabla ‘ventas’ CREATE TABLE ventas ( vnt_clt INTEGER NOT NULL, vnt_tda INTEGER NOT NULL, vnt_art INTEGER NOT NULL, vnt_cant INTEGER NOT NULL, vnt_precio INTEGER NOT NULL, vnt_fch NUMBER(8) ); Consideraciones generales: a) Las definiciones individuales de columnas se separan mediante comas. b) No se pone coma después de la última definición de columna. c) Las mayúsculas y minúsculas son indiferentes a la hora de crear una tabla. d) Si intentamos crear una tabla y existe otra tabla con ese nombre, aparecerá un mensaje de error. TIPOS DE DATOS EN ORACLE Oracle soporta los siguientes tipos de datos: TIPO DE DATO DEFINICIÓN CHAR Cadena de caracteres de longitud fija. Máximo: 255. VARCHAR2 Cadena de caracteres de longitud variable. Máximo: 2000. NUMBER(p,s) Número entero y real hasta 38 dígitos. ‘p’ es el total de dígitos(1..38) y ‘s’ es el número de decimales. DATE Tipo de dato FECHA. LONG Cadena de caracteres de longitud variable. Máximo: 2GB. RAW Igual que el tipo VARCHAR2, pero en binario. 255 bytes. LONG RAW Igual que LONG, pero en binario. ROWID Tipo de dato int erno. No consideraremos. NCHAR Oracle version 8. Parecido a CHAR. NVARCHAR2 Oracle versión 8. Parecido a CHAR. BLOB Oracle versión 8. Objeto binario de gran tamaño. 4GB. 1.1. INTEGRIDAD DE LOS DATOS. • Cuando definimos una tabla existen varias condiciones predefinidas. • Por ejemplo, si definimos la columna EDAD en una tabla, está claro que la edad debe ser mayor que 0, nunca puede ser negativo. • La integridad hace referencia a que los datos de la base de datos están sujetos a unas restricciones antes de almacenarse en ella. • Una restricción de integridad es una regla que restringe el rango de valores para una o más columnas en la tabla. Prácticas de Diseño y Gestión de Bases de Datos Page 7 of 23
  • 8. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) • Existe otro tipo que es la integridad referencial, el cual garantiza que los valores de una columna dependan de los valores de otra columna ( o columnas) de la tabla. Por ejemplo si tuviesemos la tabla VENTA y la tabla ARTICULOS, nunca podrá ocurrir que exista una venta de un artículo que no existe. 1.1.1. RESTRICCIONES EN CREATE TABLE. • Para definir las restricciones en la orden CREATE TABLE usamos la cláusula CONSTRAINT. • La cláusula CONSTRAINT puede restringir a una sola columna o a un grupo de columnas de una misma tabla. • Hay dos formas de especificar las restricciones: o Como parte de la definición de columnas o Al final, una vez especificadas todas las columnas. • Sintáxis: CREATE TABLE nombre_tabla { Columna1 TIPO_DE_DATO [CONSTRAINT nombre_restricción] [NOT NULL] [UNIQUE] [PRIMARY KEY] [DEFAULT valor] [REFERENCES nombre_tabla [(columna[, columna])] [ON DELETE CASCADE]] [CHECK condición], Columna2 ..... ) [TABLESAPCE espacio_de_tabla]; • Ejemplo: CREATE TABLE EMPLEADO ( NOMBRE VARCHAR2(25) PRIMARY KEY, EDAD NUMBER CHECK (EDAD BETWEEN 18 AND 35), COD_PROVINCIA NUMBER(2) REFERENCES PROVINCIAS ON DELETE CASCADE En este ejemplo hemos creado una tabla donde: a) La clave primaria es Nombre b) Clave ajena: COD_PROVINCIA que referencia la tabla PROVINCIAS. c) Verificación de la edad, que debe estar comprendida entre 18 y 35 años. Las restricciones de la orden CREATE TABLE que aparecen al final de la definición de columnas (o de tabla) se diferencia de la anterior en que se puede hacer referencias a varias columnas en una única restricción. Prácticas de Diseño y Gestión de Bases de Datos Page 8 of 23
  • 9. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Veamos un ejemplo: SQL> CREATE TABLE EMPLEADO( NOMBRE VARCHAR2(25), EDAD NUMBER, COD_PROVINCIA NUMBER(2), CONSTRAINT PRIMARY KEY (NOMBRE) CONSTRAINT CHECK(EDAD BETWEEN 18 AND 35), CONSTRAINT FOREIGN KEY (COD_PROVINCIA) REFERENCES PROVINCIAS ON DELETE CASCADE ); 1.1.1.1 Restricción PRIMARY KEY. • Una clave primaria dentro de una tabla es una columna o conjunto de columnas que identifican unívocamente a cada fila. • Debe ser única, no nula y obligatoria. Cómo máximo podemos definir una clave primaria por tabla. • Esta clave primaria puede ser referenciada por una columna o columnas de otra tabla. Esto será llamado clave ajena en la otra tabla. • Cuando se crea una clave primaria automáticamente se crea un índice que facilita el acceso a esa tabla. • Para definir una clave primaria en una tabla usaremos la definición PRIMARY KEY. Formatos de la orden CREATE TABLE para definir las claves primarias: • Sintáxis 1: Formato de restricción de columna CREATE TABLE nombre_tabla( Columna1 TIPO_DE_DATO (CONSTRAINT nombre_restricción) PRIMARY KEY, Columna2 TIPO_DE_DATO ........ ) [TABLESPACE espacio_de_tabla]; • Sintáxis 2: Formato de restricción de tabla CREATE TABLE nombre_tabla( Columna1 TIPO_DE_DATO Columna2 TIPO_DE_DATO ........ [CONSTRAINT nombre_restricción) PRIMARY KEY (columna [,columna]), ........ ) [TABLESPACE espacio_de_tabla]; Veamos un ejemplo: Prácticas de Diseño y Gestión de Bases de Datos Page 9 of 23
  • 10. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Supongamos que tenemos la tabla BLOQUEPISOS. NOMBRE COLUMNA Representa Tipo CALLE Calle donde está el bloque VARCHAR2(30) NUMERO Número del bloque NUMBER(3) PISO Número de planta NUMBER(2) PUERTA Puerta CHAR(1) CODIGO_POSTAL Código Postal NUMBER(5) METROS Metros de la vivienda NUMBER(5) COMENTARIOS Otros datos de la vivienda VARCHAR2(60) COD_ZONA Código de zona del bloque NUMBER(2) DNI DNI del propietario VARCHAR2(10) La clave primaria estará formada por las columnas Calle, Número, Piso y Puerta. Por tanto no puden contener valores nulos. Se puede crear de la siguiente forma: Vamos a crear el siguiente ejemplo usando la restricción de tabla Ejemplo restriccion1 SQL> CREATE TABLE BLOQUEPISOS ( CALLE VARCHAR2(30) NOT NULL, NUMERO NUMBER(3) NOT NULL, PISO NUMBER(2) NOT NULL, PUERTA CHAR(1) NOT NULL, CODIGO_POSTAL NUMBER(5), METROS NUMBER(5), COMENTARIOS VARCHAR2(60), COD_ZONA NUMBER(2), DNI VARCHAR2(10), CONSTRAINT pk_viv PRIMARY KEY (calle, numero, piso, puerta) ); Ahora borramos la tabla con la orden DROP que veremos mas adelante. SQL> DROP TABLE BLOQUEPISOS; Table dropped Y la creamos de la siguente forma (Fichero restriccion2) SQL>CREATE TABLE BLOQUEPISOS ( CALLE VARCHAR2(30) NOT NULL, NUMERO NUMBER(3) NOT NULL, PISO NUMBER(2) NOT NULL, PUERTA CHAR(1) NOT NULL, CODIGO_POSTAL NUMBER(5), METROS NUMBER(5), COMENTARIOS VARCHAR2(60), COD_ZONA NUMBER(2), DNI VARCHAR2(10), PRIMARY KEY (calle, numero, piso, puerta) ); SQL> DROP TABLE BLOQUEPISOS; Prácticas de Diseño y Gestión de Bases de Datos Page 10 of 23
  • 11. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Suponga mos ahora que tenemos la tabla siguiente llamada ZONAS: NOMBRE COLUMNA Representa Tipo COD_ZONA Código de la zona NUMBER(3) NOMBREZONA Nombre de la zona VARCHAR2(20) MASDATOS Otros datos de la zona VARCHAR2(50) La clave primaria es el código de zona y la definimos formando parte de la columna (Restricción de columna) Fichero zonas SQL>CREATE TABLE ZONAS ( COD_ZONAS NUMBER(3) PRIMARY KEY, NOMBREZONA VARCHAR2(15) NOT NULL, MASDATOS VARCHAR2(60) ); SQL> DROP TABLE ZONAS; Si en una tabla forman parte de la clave primaria varias columnas, ésta no se puede definir como restricción de columna. No podríamos hacer lo siguiente: SQL> CREATE TABLE BLOQUEPISOS ( CALLE VARCHAR2(30) PRIMARY KEY, NUMERO NUMBER(3) PRIMARY KEY, PISO NUMBER(2) PRIMARY KEY, PUERTA CHAR(1) PRIMARY KEY, CODIGO_POSTAL NUMBER(5), METROS NUMBER(5), COMENTARIOS VARCHAR2(60), COD_ZONA NUMBER(2), DNI VARCHAR2(10), ); NUMERO NUMBER(3) PRIMARY KEY, * ERROR en línea 4: ORA-02260: la tabla sólo puede tener una clave primaria 1.1.1.2. Restricción FOREIGN KEY. • Una clave ajena está formada por una o varias columnas que están asociadas a una clave primaria de otra o de la misma tabla. • Se pueden definir tantas claves ajenas como sea necesario, y pueden estar en la misma tabla que la clave primaria. • El valor de la columna o columnas que son claves ajenas debe ser: o NULL o O igual a un valor de la clave referenciada (Integridad referencial). Prácticas de Diseño y Gestión de Bases de Datos Page 11 of 23
  • 12. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) • Para entender el significado de claves primarias y claves ajenas veamos el siguiente gráfico: En estas tablas tenemos: • Clave primaria de la tabla PERSONAS: DNI. • Clave primaria de la tabla PROVINCIAS: COD_PROV. • Clave ajena en la tabla PERSONAS: COD_PROV. Esto implica que las tablas PERSONAS y PROVINCIAS están relacionadas a través del atributo COD_PROV. Vamos a crear estas dos tablas con sus relaciones. Fichero ajenas. CREATE TABLE PROVINCIAS ( COD_PROV NUMBER(2) PRIMARY KEY, NOM_PROV VARCHAR2(15) ); CREATE TABLE PERSONAS ( DNI NUMBER(8) PRIMARY KEY, NOMBRE VARCHAR2(15), DIRECCION VARCHAR2(25), POBLACION VARCHAR2(20), COD_PROV NUMBER(2) NOT NULL REFERENCES PROVINCIAS ); Si ahora intentamos borrar la tabla PROVINCIAS: SQL> DROP TABLE PROVINCIAS; DROP TABLE PROVINCIAS * ERROR at line 1: ORA-02449: unique/primary keys in table referenced by foreign keys • Tenemos que crear primero la tabla PROVINCIAS y luego la tabla PERSONAS, ya que la segunda tabla hace referencia a la primera tabla . • Si queremos borrar las tablas, comenzaremos borrando la tabla PERSONAS, y después, la tabla PROVINCIAS. Si intentamos hacerlo al revés se emitirá un mensaje como el de arriba. Prácticas de Diseño y Gestión de Bases de Datos Page 12 of 23
  • 13. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) SQL> DROP TABLE PERSONAS; Table dropped. SQL> DROP TABLE PROVINCIAS; Table dropped. Formatos de la orden CREATE TABLE para definir las claves ajenas: • Sintáxis 1: Formato de restricción de columna CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO [CONSTRAINT nombre_restricción] REFERENCES nombre_tabla2 [(columna)] [ON DELETE CASCADE] ......... columna2 TIPO_DE_DATO ........ ) [TABLESPACE espacio_de_tabla]; • Sintáxis 2: Formato de restricción de tabla CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO columna2 TIPO_DE_DATO .................. [CONSTRAINT nombre_restricción] FOREIGN KEY (columna [, columna]) REFERENCES nombre_tabla2 [(columna [,columna])] [ON DELETE CASCADE] ......... ) [TABLESPACE espacio_de_tabla]; Si lo que deseamos es borrar alguna provincia de la tabla PROVINCIAS, y que las filas correspondientes de la tabla PERSONAS con esa provincia sean eliminadas, se añadirá la cláusula ON DELETE CASCADE en la opción REFERENCES: Fichero cascada CREATE TABLE PROVINCIAS ( COD_PROV NUMBER(2) PRIMARY KEY, NOM_PROV VARCHAR2(15) ); CREATE TABLE PERSONAS ( DNI NUMBER(8) PRIMARY KEY, NOMBRE VARCHAR2(15), DIRECCION VARCHAR2(25), POBLACION VARCHAR2(20), COD_PROV NUMBER(2) NOT NULL, FOREIGN KEY (COD_PROV) REFERENCES PROVINCIAS ON DELETE CASCADE ); Prácticas de Diseño y Gestión de Bases de Datos Page 13 of 23
  • 14. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) SQL> DROP TABLE PERSONAS; Table dropped SQL> DROP TABLE PROVINCIAS; Table dropped • En los ejemplos anteriores al definir las restricciones de claves primarias y ajenas no hemos dado nombre (excepto en el ejemplo restriccion1). • Por defecto Oracle asigna un nombre de restricción SYS_C00n, donde ‘n’ es un número asignado automáticamente por Oracle. • Cuando una restricción es violada Oracle emite un mensaje de error. El mesaje de error es algo parecido a lo siguiente: ERROR en línea 1: ORA-00001: restricción única (Valor.SYS_C00679) violada. Valor es el contenido de un campo. A continuación vamos a crear las restricciones dándole nombres: Fichero restrinombre CREATE TABLE PROVINCIAS ( COD_PROV NUMBER(2) CONSTRAINT PK_PROV PRIMARY KEY, NOM_PROV VARCHAR2(15) ); CREATE TABLE PERSONAS ( DNI NUMBER(8) CONSTRAINT PK_PER PRIMARY KEY, NOMBRE VARCHAR2(15), DIRECCION VARCHAR2(25), POBLACION VARCHAR2(20), COD_PROV NUMBER(2) NOT NULL, CONSTRAINT FK_PER FOREIGN KEY (COD_PROV) REFERENCES PROVINCIAS ON DELETE CASCADE ); PK_PROV: Nombre de la restriccion de Primary Key en PROVEEDORE. PK_PER: Nombre de la restriccion de Primary Key en PERSONAS. FK_PER: Nombre de la restriccion de Foreign Key en PERSONAS SQL> DROP TABLE PERSONAS; Table dropped. SQL> DROP TABLE PROVINCIAS; Table dropped. Prácticas de Diseño y Gestión de Bases de Datos Page 14 of 23
  • 15. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Especificación DEFAULT • En el momento de crear una tabla podemos designar valores por defecto en las columnas. • Si especificamos la cláusula DEFAULT a una columna, le proporcionamos un valor por omisión cuando el valor de la columna no se especifica en la cláusula INSERT. • INSERT es la cláusula de inserción de datos. • En la cláusula DEFAULT es posible incluir varias expresiones: constantes, funciones SQL y variables UID y SYSDATE. Veamos algunos ejemplos. • Creemos la tabla EJEMPLO1 y se le asigna a la columna FECHA la fecha del sistema. Fichero ejemplo1 SQL>CREATE TABLE EJEMPLO1 ( DNI VARCHAR2(10) NOT NULL, NOMBRE VARCHAR2(30) NOT NULL, EDAD NUMBER(2), FECHA DATE DEFAULT SYSDATE ); Table created SQL> DROP TABLE EJEMPLO1; Table dropped • Cuando vayamos a insertar valores de una fila en la tabla no es necesario insertar el valor de la columna FECHA, ya que tomará por defecto la fecha del día. Vamos a crear la tabla EJEMPLO2 y asignamos por defecto a la columna NOMBRE la cadena ‘No definido’ y a la columna USUARIO, el número identificativo del usuario. Fichero ejemplo2 SQL> CREATE TABLE EJEMPLO2 ( DNI VARCHAR2(10) NOT NULL, NOMBRE VARCHAR2(30) DEFAULT 'No definido', USUARIO NUMBER DEFAULT UID); Prácticas de Diseño y Gestión de Bases de Datos Page 15 of 23
  • 16. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) 1.1.1.3. Restricción CHECK. • Muchas columnas de tablas requieren valores limitados dentro de un rango o el cumplimiento de ciertas condiciones. • Con una restricción de verificación de condiciones se puede expresar una condición que ha de cumplirse para todas y cada una de las filas de la tabla. • La restricción CHECK actúa como la cláusula WHERE. • En la cláusula CHECK no cabe incluir subconsultas ni las pseudocolumnas SYSDATE, UID, USER. • Sintáxis 1: Formato de restricción de columna CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO [CONSTRAINT nombre_restricción] CHECK (condición), ......... columna2 TIPO_DE_DATO ........ ) [TABLESPACE espacio_de_tabla]; • Sintáxis 2: Formato de restricción de tabla CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO columna2 TIPO_DE_DATO .................. [CONSTRAINT nombre_restricción] CHECK (condición) ......... ) [TABLESPACE espacio_de_tabla]; Ejemplos. Se desea crear la tabla EJEMPLOS, cuyas columnas y restricciones son: Columna Tipo de Dato DNI VARCHAR2(10) NOMBRE VARCHAR2(30) EDAD NUMBER(2) CURSO NUMBER Condiciones: a) DNI no puede ser nulo. b) La clave primaria es el DNI. c) El NOMBRE no puede ser nulo. Prácticas de Diseño y Gestión de Bases de Datos Page 16 of 23
  • 17. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) d) La EDAD ha de estar comprend ida entre 5 y 20 años. e) El NOMBRE ha de estar en mayúsculas. f) El CURSO sólo puede almacenar1,2, ó 3. SQL>CREATE TABLE EJEMPLO ( DNI VARCHAR2(10) NOT NULL, NOMBRE VARCHAR2(30) NOT NULL, EDAD NUMBER(2), CURSO NUMBER, CONSTRAINT CLAVE_P PRIMARY KEY(DNI), CONSTRAINT COMP_EDAD CHECK (EDAD BETWEEN 5 AND 20), CONSTRAINT NOMBRE_MAYUS CHECK (NOMBRE=UPPER(NOMBRE)), CONSTRAINT COMP_CURSO CHECK (CURSO IN(1,2,3)) ); 1.1.1.4. Restricción UNIQUE. • La restricción UNIQUE evita valores repetidos en la misma columna. Puede contener una o varias columnas • Es similar a la restricción PRIMARY KEY, salvo que son posibles varias columnas UNIQUE definidas en una tabla. • Admite valores NULL. • Al igual que con PRIMARY KEY, cuando se define la restricción UNIQUE se crea un índice automáticamente. • Sintáxis 1: Formato de restricción de columna CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO [CONSTRAINT nombre_restricción] UNIQUE, ......... columna2 TIPO_DE_DATO ........ ) [TABLESPACE espacio_de_tabla]; • Sintáxis 2: Formato de restricción de tabla CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO columna2 TIPO_DE_DATO .................. [CONSTRAINT nombre_restricción] UNIQUE (columna[, columna]), ......... ) [TABLESPACE espacio_de_tabla]; Prácticas de Diseño y Gestión de Bases de Datos Page 17 of 23
  • 18. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) 2. ALTER TABLE. 2.1. ADICIÓN DE UNA COLUMNA A UNA TABLA Las tablas se pueden modificar de dos formas: a) Cambiando la definición de una columna (MODIFY). b) Añadiendo una columna a una tabla existente (ADD). Sintáxis ALTER TABLE nombre_tabla ADD (columna tipo_dato [, columna tipo_datos]); • Un error típico es intentar añadir una columna con la restricción NOT NULL. Si la tabla está vacía no hay problemas, pero si no es así no podremos poner la restricción NOT NULL. • Una solución a esto es crear la columna sin poner la restricciones, y luego actualizar las filas correspondientes de la tabla. Se realizará con la sentencia UPDATE que veremos más adelante. 2.2. MODIFICACIÓN DE LA DEFINICIÓN DE UNA COLUMNA. La modificación de un campo de una tabla puede ser debido a: a) Deseemos incrementar la anchura. b) Deseemos especificar una anchura o mascara para opciones numéricas c) Si una columna contiene valores, podemos modificar su definición y que sea NOT NULL. d) Si queremos acortar una columna, tiene que estar libre de datos. Hay que hacer estas modificaciones cuando no hay datos en la columna especificada. e) Para cambiar el tipo de datos también tiene que estar vacía. Sintáxis ALTER TABLE nombre_tabla MODIFY (columna, …); RESUMEN DE ALTER TABLE • La sintáxis de ALTER TABLE es la siguiente: Sintáxis ALTER TABLE nombre_tabla {[ADD (columna [,columna]...)] [MODIFY (columna [,columna]....)] [ADD CONSTRAINT restricción] [DROP CONSTRAINT restricción]); Prácticas de Diseño y Gestión de Bases de Datos Page 18 of 23
  • 19. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) • ADD añade una columna o más al final de la tabla. • MODIFY modifica una o más columnas existentes en la tabla. • ADD CONSTRAINT añade una restricción a la definición de la tabla. • DROP CONSTRAINT elimina una restricción de la tabla. Veamos algunos ejemplos. • Añadir a la tabla ejemplo dos columnas SEXO e IMPORTE. La descripción de la tabla ejemplo es la siguiente: SQL> DESC EJEMPLO; Name Null? Type DNI NOT NULL VARCHAR2(10) NOMBRE NOT NULL VARCHAR2(30) EDAD NUMBER(2) CURSO NUMBER Para añadir esas dos columnas a la tabla usamos la orden ADD. SQL > ALTER TABLE EJEMPLO ADD (SEXO CHAR(1), IMPORTE NUMBER(4)); Tabla modificada. SQL> DESC EJEMPLO; Name Null? Type DNI NOT NULL VARCHAR2(10) NOMBRE NOT NULL VARCHAR2(30) EDAD NUMBER(2) CURSO NUMBER SEXO CHAR(1) IMPORTE NUMBER(4) Si hubiesemos querido añadir la restricción NOT NULL a la columna SEXO hubiesemos escrito: SQL > ALTER TABLE EJEMPLO ADD (SEXO CHAR(1) NOT NULL, IMPORTE NUMBER(4)); Esto nos podría dar el siguiente error: ALTER TABLE EJEMPLO ADD( * ERROR en línea 1: ORA-01758: La tabla debe estar vacía para añadir columna (NOT NULL) obligatoria. Este error ha aparecido porque la tabla EJEMPLO ya contiene datos. La solución pasaría por usar la orden ALTER TABLE sin el NOT NULL, y luego haciendo un UPDATE de esa columna. Prácticas de Diseño y Gestión de Bases de Datos Page 19 of 23
  • 20. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) SQL> ALTER TABLE EJEMPLO ADD (SEXO CHAR(1), IMPORTE NUMBER(4)); Tabla modificada. SQL> UPDATE EJEMPLO SET SEXO=’X’; Esta segunda orden la veremos más adelante. Para entender ahora qué es lo que hace internamente es “actualizar todas las filas de la tabla de la columna SEXO con la letra ‘X’. En el siguiente gráfico podemos ver qué actualiza. DNI NOMBRE EDAD CURSO SEXO IMPORTE X X X A continuación vamos a modificar la tabla con la orden MODIFY y se cambia la definición de la columna a NOT NULL: SQL> ALTER TABLE EJEMPLO MODIFY( SEXO CHAR(1) NOT NULL, IMPORTE NUMBER(4) ); Tabla modificada. SQL> DESC EJEMPLO; Name Null? Type DNI NOT NULL VARCHAR2(10) NOMBRE NOT NULL VARCHAR2(30) EDAD NUMBER(2) CURSO NUMBER SEXO NOT NULL CHAR(1) IMPORTE NUMBER(4) En definitiva, a la hora de añadir una columna a una tabla hay que tener en cuenta varios factores: a) Si la columna no está definida como NOT NULL, se le puede añadir en cualquier momento. b) Si la columna está definida como NOT NULL puede ocurrir 2 situaciones: a. Que la tabla esté vacía, en cuyo caso no hay problema. b. Que la tabla no esté vacía, entonces: i. Definirla sin NOT NULL. ii. Actualizar las filas correspondientes. iii. Modificar la columna a NOT NULL. Prácticas de Diseño y Gestión de Bases de Datos Page 20 of 23
  • 21. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) A continuación vamos a modificar la longitud de la columna NOMBRE de la tabla ejemplo. Tambié n vamos a dar una longitud 3 y, por defecto, se asigna 0 al IMPORTE. SQL> ALTER TABLE EJEMPLO MODIFY ( NOMBRE VARCHAR2(3), IMPORTE DEFAULT 0); Dará el siguiente error: NOMBRE VARCHAR2(3), * ERROR en línea 2: ORA-01441: La columna a modificar debe estar vacía para disminuir la longitud de la columna. Si ahora escribimos: SQL>ALTER TABLE EJEMPLO MODIFY (NOMBRE VARCHAR2(35)); Tabla modificada. Al modificar una columna de una tabla se han de tener en cuenta estos aspectos: - Se puede aumentar la longitiud de una columna en cualquier momento. - Es posible aumentar o disminuir el número de posicio nes decimales en una columna de tipo NUMBER. - Si la columna es NULL en todas las filas de la tabla, se puede disminuir la longitud y modificar el tipo de dato. - La opción MODIFY...NOT NULL sólo será posible cuando la tabla no contenga ninguna fila con valor nulo en la columna que se modifica. 2.2.1. AÑADIR RESTRICCIONES. Con la orden ALTER TABLE se pueden añadir restricciones a una TABLA. Sintáxis: ALTER TABLE nombre_tabla ADD CONSTRAINT nombreconstraint Veamos algunos ejemplos. Añadimos APELLIDO único a la tabla EMPLE: SQL> ALTER TABLE EMPLE ADD CONSTRAINT APELLIDO_UQ UNIQUE(apellido); Tabla modificada. Añadimos la restricción de COMISION no nula a la tabla EMPLE: SQL> ALTER TABLE EMPLE ADD CONSTRAINT COMI_NONULA CHECK(COMISION IS NOT NULL); check(COMISION IS NOT NULL) * ERROR en línea 3: ORA-02293: no se ha podido activar (MAJESUS.COMI_NONULA) – compruebe restricción de violada Prácticas de Diseño y Gestión de Bases de Datos Page 21 of 23
  • 22. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) Este error es debido a que la columna COMISION es nula en muchas filas de la tabla. Para añadir la restricción es necesario dar valores a todas las filas de la tabla. Para ver las restricciones creadas tenemos que seleccionar la columna CONSTRAINT_NAME de la tabla USER_CONSTRAINTS SQL> SELECT CONSTRAINT_NAME FROM USER_COSNTRAINTS WHERE TABLE_NAME=’EMPLE’; 2.2.2. BORRADO DE RESTRICCIONES. Sintáxis ALTER TABLE nombre_tabla DROP CONSTRAINT nombre_constraint...; Nombre_restricción; Ejemplo: Borrar la restricción APELLIDO_UQ de la tabla EMPLE. SQL> ALTER TABLE EMPLE DROP CONSTRAINT APELLIDO_UQ; Tabla modificada. CREACIÓN DE TABLAS CON DATOS RECUPERADOS DE UNA CONSULTA. • La sentencia CREATE TABLE permite crear una tabla a partir de la consulta de otra tabla existente. Sintáxis CREATE TABLE nombre_tabla ( ..... ) [TABLESPACE espacio_de_tabla] AS consulta; Ejemplo. SQL> CREATE TABLE EJEMPLO_AS SELECT * FROM EJEMPLO; • No es necesario especificar tipos ni tamaño de las columnas, ya que vienen determinados por los tipos y tamaños de las recuperadas en la consulta. Prácticas de Diseño y Gestión de Bases de Datos Page 22 of 23
  • 23. Formación 2002. Tema 3. Lenguaje de Definición de Datos (DDL) 3. BORRADO DE TABLAS. 3.1. DROP TABLE. • La orden DROP TABLE suprime una tabla de la base de datos. • Cada usuario puede borrar sus propias tablas. • Sólo el administrador de la base de datos o algún usario con el privilegio DROP ANY TABLE puede borrar las tablas de otro usuario, • Al suprimir una tabla también se suprimen los índices y los pirvilegios asociados a ella. • Las vistas y los sinónimos creados a partir de esa tabla dejan de funcionar, pero siguen existiendo en la base de datos, por lo que habría que eliminarlos. • Sintáxis: DROP TABLE [usuario].nombre_table [CASCADE CONSTRAINTS]; 3.2. TRUNCATE TABLE. • La orden TRUNCATE permite suprimir todas las filas de una tabla y liberar el epacio ocupado para otros usos sin que desaparezca la definición de la tabla de la base de datos. • La eliminación de filas con la orden TRUNCATE es más rápida que con DELETE. • Sintáxis: TRUNCATE TABLE [usuario.]nombre_table [{DROP|REUSE} STORAGE]; • No se puede truncar una tabla cuya clave primaria sera referenciada por la clave ajena de otra tabla. Antes de truncar la tabla hay que desactivar la restricción. (Ejemplo de la tabla PROVINCIAS vista anteriormente). Prácticas de Diseño y Gestión de Bases de Datos Page 23 of 23