Está en la página 1de 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

TEMA 3 LENGUAJE DE DEFINICIN DE DATOS (DDL)


1. Creacin de tablas. 2. Modificacin de tablas. 3. Borrado de tablas.

Prcticas de Diseo y Gestin de Bases de Datos

Page 1 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

El lenguaje de definicin de datos en SQL segn vimos en el tema anterior se divide en los siguientes comandos: CREATE TABLE ALTER TABLE DROP TABLE.

1. CREACIN DE UNA TABLA.

Una tabla se crea con la orden CREATE TABLE. La sintxis del comando CREATE TABLE es una sintxis reducida del comando. Luego veremos la sintxis completa del comando CREATE TABLE. Por ahora para crear una tabla tenemos suficiente con la siguiente. Sintxis 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. Slo queda introducer los datos. Una vez que la tabla est creada su definicin 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 maysculas o minsculas, es indiferente. b) Definicin 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 vaco.
Prcticas de Diseo y Gestin de Bases de Datos Page 2 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

La definicin 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 mximo 254 columnas. Las claves primarias se deben definir como NOT NULL.

c) Reglas para la definicin 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 mximo es 30.

Segn la sintxis anterior vamos a crear las tablas en SQL*PLUS. ESTRUCTURA DE NUESTRA BASE DE DATOS Ha llegado la hora de saber cmo va a estar organizada nuestra base de datos. Aunque al principio el siseo pueda parecer un poco complejo, veamos un grfico 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 smbolo #.

Prcticas de Diseo y Gestin de Bases de Datos

Page 3 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Tabla Clientes: #clt_num clt_apell clt_nom clt_pais clt_pob

La tabla clientes lleva un nmero de identificacin nico no vaco (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 nmero de identificacin nico no vaco (la clave primaria tda_num), el rea geogrfica en que se encuentra la tienda (tda_pob), y el nombre del gerente (tda_ger).

Prcticas de Diseo y Gestin de Bases de Datos

Page 4 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Tabla Proveedores: #prv_num prv_nom

Contiene un nmero de identificacin 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 artculos, a travs del nmero de proveedor que aparece para cada artculo en la columna art_prv.

Tabla Articulos: #art_num art_nom art_peso art_col art_pc art_pv art_prv

Tiene un nmero de identificacin nico, la clave primaria (art_num), y contiene adems el nombre del artculo (art_nom), su peso (art_peso), su color (art_col), el precio de compra (art_pc), el precio de venta (art_pv) y el nmero de proveedor (art_prv), el cual hace de clave fornea para poderse relacionar con el nmero 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 artculos por otro, lo que permite el seguimiento de los artculos comprados por cada cliente y de las tiendas donde se efectuaron las adquisiciones. La columna vnt_clt contiene el nmero de cliente, la columna vnt_tda el nmero de tienda de adquisicin y la comlumna vnt_art el nmero de artculo 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 artculos se introducen en esta tabla tantas filas como artculos se han adquirido. La clave primaria de la tabla se ha formado por la unin de cuatro claves forneas, que son vnt_clt, vnt_tda, vnt_art y vnt_fch. Esto significa, que un cliente no va a comprar el mismo artculo en la misma tienda y en la misma fecha.

Prcticas de Diseo y Gestin de Bases de Datos

Page 5 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

CREACIN DE LAS TABLAS DE NUESTRA BASE DE DATOS Creacin 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 vaca. Esto quiere decir que en la definicin de una tabla, siempre tendremos que poner NOT NULL en el campo que es clave primaria. Las claves primarias sern aquellas que nos permitirn relaccionar las filas de una tabla con las filas de otra tabla. Creacin de la tabla tiendas CREATE TABLE tiendas ( tda_num INTEGER NOT NULL PRIMARY KEY, tda_pob CHAR(15), tda_ger CHAR(25) ); Creacin de la tabla proveedores CREATE TABLE proveedores ( prv_num integer NOT NULL PRIMARY KEY, prv_nom CHAR(25) ); Creacin 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 );

Prcticas de Diseo y Gestin de Bases de Datos

Page 6 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Creacin 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 despus de la ltima definicin de columna. c) Las maysculas y minsculas 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 CHAR VARCHAR2 NUMBER(p,s) DATE LONG RAW LONG RAW ROWID NCHAR NVARCHAR2 BLOB DEFINICIN
Cadena de caracteres de longitud fija. Mximo: 255. Cadena de caracteres de longitud variable. Mximo: 2000. Nmero entero y real hasta 38 dgitos. p es el total de dgitos(1..38) y s es el nmero de decimales. Tipo de dato FECHA. Cadena de caracteres de longitud variable. Mximo: 2GB. Igual que el tipo VARCHAR2, pero en binario. 255 bytes. Igual que LONG, pero en binario. Tipo de dato int erno. No consideraremos. Oracle version 8. Parecido a CHAR. Oracle versin 8. Parecido a CHAR. Oracle versin 8. Objeto binario de gran tamao. 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 estn sujetos a unas restricciones antes de almacenarse en ella. Una restriccin de integridad es una regla que restringe el rango de valores para una o ms columnas en la tabla.
Page 7 of 23

Prcticas de Diseo y Gestin de Bases de Datos

Formacin 2002. Tema 3.

Lenguaje de Definicin 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 artculo que no existe.

1.1.1. RESTRICCIONES EN CREATE TABLE. Para definir las restricciones en la orden CREATE TABLE usamos la clusula CONSTRAINT. La clusula 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 definicin de columnas o Al final, una vez especificadas todas las columnas. Sintxis: CREATE TABLE nombre_tabla { Columna1 TIPO_DE_DATO [CONSTRAINT nombre_restriccin] [NOT NULL] [UNIQUE] [PRIMARY KEY] [DEFAULT valor] [REFERENCES nombre_tabla [(columna[, columna])] [ON DELETE CASCADE]] [CHECK condicin], 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) Verificacin de la edad, que debe estar comprendida entre 18 y 35 aos.

Las restricciones de la orden CREATE TABLE que aparecen al final de la definicin de columnas (o de tabla) se diferencia de la anterior en que se puede hacer referencias a varias columnas en una nica restriccin.
Prcticas de Diseo y Gestin de Bases de Datos Page 8 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

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

);

1.1.1.1 Restriccin PRIMARY KEY. Una clave primaria dentro de una tabla es una columna o conjunto de columnas que identifican unvocamente a cada fila. Debe ser nica, no nula y obligatoria. Cmo mximo 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 automticamente se crea un ndice que facilita el acceso a esa tabla. Para definir una clave primaria en una tabla usaremos la definicin PRIMARY KEY.

Formatos de la orden CREATE TABLE para definir las claves primarias: Sintxis 1: Formato de restriccin de columna

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

Sintxis 2: Formato de restriccin de tabla

CREATE TABLE nombre_tabla( Columna1 TIPO_DE_DATO Columna2 TIPO_DE_DATO ........ [CONSTRAINT nombre_restriccin) PRIMARY KEY (columna [,columna]), ........ ) [TABLESPACE espacio_de_tabla];

Veamos un ejemplo:

Prcticas de Diseo y Gestin de Bases de Datos

Page 9 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Supongamos que tenemos la tabla BLOQUEPISOS. NOMBRE COLUMNA CALLE NUMERO PISO PUERTA CODIGO_POSTAL METROS COMENTARIOS COD_ZONA DNI Representa Calle donde est el bloque Nmero del bloque Nmero de planta Puerta Cdigo Postal Metros de la vivienda Otros datos de la vivienda Cdigo de zona del bloque DNI del propietario Tipo VARCHAR2(30) NUMBER(3) NUMBER(2) CHAR(1) NUMBER(5) NUMBER(5) VARCHAR2(60) NUMBER(2) VARCHAR2(10)

La clave primaria estar formada por las columnas Calle, Nmero, 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 restriccin 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;

Prcticas de Diseo y Gestin de Bases de Datos

Page 10 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Suponga mos ahora que tenemos la tabla siguiente llamada ZONAS: NOMBRE COLUMNA COD_ZONA NOMBREZONA MASDATOS Representa Cdigo de la zona Nombre de la zona Otros datos de la zona Tipo NUMBER(3) VARCHAR2(20) VARCHAR2(50)

La clave primaria es el cdigo de zona y la definimos formando parte de la columna (Restriccin 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 restriccin de columna. No podramos 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 lnea 4: ORA-02260: la tabla slo puede tener una clave primaria

1.1.1.2. Restriccin FOREIGN KEY. Una clave ajena est formada por una o varias columnas que estn 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).
Page 11 of 23

Prcticas de Diseo y Gestin de Bases de Datos

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Para entender el significado de claves primarias y claves ajenas veamos el siguiente grfico:

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 estn relacionadas a travs 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 despus, la tabla PROVINCIAS. Si intentamos hacerlo al revs se emitir un mensaje como el de arriba.
Page 12 of 23

Prcticas de Diseo y Gestin de Bases de Datos

Formacin 2002. Tema 3.

Lenguaje de Definicin 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: Sintxis 1: Formato de restriccin de columna

CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO [CONSTRAINT nombre_restriccin] REFERENCES nombre_tabla2 [(columna)] [ON DELETE CASCADE] ......... columna2 TIPO_DE_DATO ........ ) [TABLESPACE espacio_de_tabla]; Sintxis 2: Formato de restriccin de tabla

CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO columna2 TIPO_DE_DATO .................. [CONSTRAINT nombre_restriccin] 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 aadir la clusula ON DELETE CASCADE en la opcin 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 );

Prcticas de Diseo y Gestin de Bases de Datos

Page 13 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin 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 restriccin SYS_C00n, donde n es un nmero asignado automticamente por Oracle. Cuando una restriccin es violada Oracle emite un mensaje de error. El mesaje de error es algo parecido a lo siguiente:
ERROR en lnea 1: ORA-00001: restriccin nica (Valor.SYS_C00679) violada. Valor es el contenido de un campo.

A continuacin vamos a crear las restricciones dndole 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.

Prcticas de Diseo y Gestin de Bases de Datos

Page 14 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Especificacin DEFAULT En el momento de crear una tabla podemos designar valores por defecto en las columnas. Si especificamos la clusula DEFAULT a una columna, le proporcionamos un valor por omisin cuando el valor de la columna no se especifica en la clusula INSERT. INSERT es la clusula de insercin de datos. En la clusula 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 da.

Vamos a crear la tabla EJEMPLO2 y asignamos por defecto a la columna NOMBRE la cadena No definido y a la columna USUARIO, el nmero identificativo del usuario. Fichero ejemplo2
SQL> CREATE TABLE EJEMPLO2 ( DNI VARCHAR2(10) NOT NULL, NOMBRE VARCHAR2(30) DEFAULT 'No definido', USUARIO NUMBER DEFAULT UID);

Prcticas de Diseo y Gestin de Bases de Datos

Page 15 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

1.1.1.3. Restriccin CHECK. Muchas columnas de tablas requieren valores limitados dentro de un rango o el cumplimiento de ciertas condiciones. Con una restriccin de verificacin de condiciones se puede expresar una condicin que ha de cumplirse para todas y cada una de las filas de la tabla. La restriccin CHECK acta como la clusula WHERE. En la clusula CHECK no cabe incluir subconsultas ni las pseudocolumnas SYSDATE, UID, USER. Sintxis 1: Formato de restriccin de columna

CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO [CONSTRAINT nombre_restriccin] CHECK (condicin), ......... columna2 TIPO_DE_DATO ........ ) [TABLESPACE espacio_de_tabla];

Sintxis 2: Formato de restriccin de tabla

CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO columna2 TIPO_DE_DATO .................. [CONSTRAINT nombre_restriccin] CHECK (condicin) ......... ) [TABLESPACE espacio_de_tabla]; Ejemplos. Se desea crear la tabla EJEMPLOS, cuyas columnas y restricciones son: Columna DNI NOMBRE EDAD CURSO Condiciones: a) DNI no puede ser nulo. b) La clave primaria es el DNI. c) El NOMBRE no puede ser nulo.
Prcticas de Diseo y Gestin de Bases de Datos Page 16 of 23

Tipo de Dato VARCHAR2(10) VARCHAR2(30) NUMBER(2) NUMBER

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

d) La EDAD ha de estar comprend ida entre 5 y 20 aos. e) El NOMBRE ha de estar en maysculas. f) El CURSO slo 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. Restriccin UNIQUE. La restriccin UNIQUE evita valores repetidos en la misma columna. Puede contener una o varias columnas Es similar a la restriccin 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 restriccin UNIQUE se crea un ndice automticamente. Sintxis 1: Formato de restriccin de columna

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

Sintxis 2: Formato de restriccin de tabla

CREATE TABLE nombre_tabla columna1 TIPO_DE_DATO columna2 TIPO_DE_DATO .................. [CONSTRAINT nombre_restriccin] UNIQUE (columna[, columna]), ......... ) [TABLESPACE espacio_de_tabla];
Prcticas de Diseo y Gestin de Bases de Datos Page 17 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

2. 2.1.

ALTER TABLE. ADICIN DE UNA COLUMNA A UNA TABLA

Las tablas se pueden modificar de dos formas: a) Cambiando la definicin de una columna (MODIFY). b) Aadiendo una columna a una tabla existente (ADD). Sintxis ALTER TABLE nombre_tabla ADD (columna tipo_dato [, columna tipo_datos]); Un error tpico es intentar aadir una columna con la restriccin NOT NULL. Si la tabla est vaca no hay problemas, pero si no es as no podremos poner la restriccin NOT NULL. Una solucin 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 ms adelante. MODIFICACIN DE LA DEFINICIN DE UNA COLUMNA.

2.2.

La modificacin de un campo de una tabla puede ser debido a: a) Deseemos incrementar la anchura. b) Deseemos especificar una anchura o mascara para opciones numricas c) Si una columna contiene valores, podemos modificar su definicin 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 tambin tiene que estar vaca. Sintxis ALTER TABLE nombre_tabla MODIFY (columna, );

RESUMEN DE ALTER TABLE La sintxis de ALTER TABLE es la siguiente: Sintxis ALTER TABLE nombre_tabla {[ADD (columna [,columna]...)] [MODIFY (columna [,columna]....)] [ADD CONSTRAINT restriccin] [DROP CONSTRAINT restriccin]);
Prcticas de Diseo y Gestin de Bases de Datos Page 18 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

ADD aade una columna o ms al final de la tabla. MODIFY modifica una o ms columnas existentes en la tabla. ADD CONSTRAINT aade una restriccin a la definicin de la tabla. DROP CONSTRAINT elimina una restriccin de la tabla.

Veamos algunos ejemplos. Aadir a la tabla ejemplo dos columnas SEXO e IMPORTE. La descripcin de la tabla ejemplo es la siguiente:

SQL> DESC EJEMPLO; Name DNI NOMBRE EDAD CURSO Null? NOT NULL NOT NULL Type VARCHAR2(10) VARCHAR2(30) NUMBER(2) NUMBER

Para aadir 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 DNI NOMBRE EDAD CURSO SEXO IMPORTE Null? NOT NULL NOT NULL Type VARCHAR2(10) VARCHAR2(30) NUMBER(2) NUMBER CHAR(1) NUMBER(4)

Si hubiesemos querido aadir la restriccin NOT NULL a la columna SEXO hubiesemos escrito:
SQL > ALTER TABLE EJEMPLO ADD (SEXO CHAR(1) NOT NULL, IMPORTE NUMBER(4));

Esto nos podra dar el siguiente error:


ALTER TABLE EJEMPLO ADD( * ERROR en lnea 1: ORA-01758: La tabla debe estar vaca para aadir columna (NOT NULL) obligatoria.

Este error ha aparecido porque la tabla EJEMPLO ya contiene datos. La solucin pasara por usar la orden ALTER TABLE sin el NOT NULL, y luego haciendo un UPDATE de esa columna.
Prcticas de Diseo y Gestin de Bases de Datos Page 19 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin 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 ms 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 grfico podemos ver qu actualiza. DNI NOMBRE EDAD CURSO SEXO X X X IMPORTE

A continuacin vamos a modificar la tabla con la orden MODIFY y se cambia la definicin 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 DNI NOMBRE EDAD CURSO SEXO IMPORTE Null? NOT NULL NOT NULL Type VARCHAR2(10) VARCHAR2(30) NUMBER(2) NUMBER CHAR(1) NUMBER(4)

NOT NULL

En definitiva, a la hora de aadir 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 aadir en cualquier momento. b) Si la columna est definida como NOT NULL puede ocurrir 2 situaciones: a. Que la tabla est vaca, en cuyo caso no hay problema. b. Que la tabla no est vaca, entonces: i. Definirla sin NOT NULL. ii. Actualizar las filas correspondientes. iii. Modificar la columna a NOT NULL.

Prcticas de Diseo y Gestin de Bases de Datos

Page 20 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

A continuacin 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 lnea 2: ORA-01441: La columna a modificar debe estar vaca 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 nmero 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 opcin MODIFY...NOT NULL slo ser posible cuando la tabla no contenga ninguna fila con valor nulo en la columna que se modifica.

2.2.1. AADIR RESTRICCIONES. Con la orden ALTER TABLE se pueden aadir restricciones a una TABLA. Sintxis: ALTER TABLE nombre_tabla ADD CONSTRAINT nombreconstraint Veamos algunos ejemplos. Aadimos APELLIDO nico a la tabla EMPLE:
SQL> ALTER TABLE EMPLE ADD CONSTRAINT APELLIDO_UQ UNIQUE(apellido); Tabla modificada.

Aadimos la restriccin 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 lnea 3: ORA-02293: no se ha podido activar (MAJESUS.COMI_NONULA) compruebe restriccin de violada

Prcticas de Diseo y Gestin de Bases de Datos

Page 21 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

Este error es debido a que la columna COMISION es nula en muchas filas de la tabla. Para aadir la restriccin 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. Sintxis ALTER TABLE nombre_tabla DROP CONSTRAINT nombre_constraint...; Nombre_restriccin; Ejemplo: Borrar la restriccin APELLIDO_UQ de la tabla EMPLE.
SQL> ALTER TABLE EMPLE DROP CONSTRAINT APELLIDO_UQ; Tabla modificada.

CREACIN 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. Sintxis 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 tamao de las columnas, ya que vienen determinados por los tipos y tamaos de las recuperadas en la consulta.

Prcticas de Diseo y Gestin de Bases de Datos

Page 22 of 23

Formacin 2002. Tema 3.

Lenguaje de Definicin de Datos (DDL)

3. 3.1. 3.2.

BORRADO DE TABLAS. DROP TABLE. La orden DROP TABLE suprime una tabla de la base de datos. Cada usuario puede borrar sus propias tablas. Slo el administrador de la base de datos o algn usario con el privilegio DROP ANY TABLE puede borrar las tablas de otro usuario, Al suprimir una tabla tambin se suprimen los ndices y los pirvilegios asociados a ella. Las vistas y los sinnimos creados a partir de esa tabla dejan de funcionar, pero siguen existiendo en la base de datos, por lo que habra que eliminarlos. Sintxis: DROP TABLE [usuario].nombre_table [CASCADE CONSTRAINTS]; 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 definicin de la tabla de la base de datos. La eliminacin de filas con la orden TRUNCATE es ms rpida que con DELETE. Sintxis: 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 restriccin. (Ejemplo de la tabla PROVINCIAS vista anteriormente).

Prcticas de Diseo y Gestin de Bases de Datos

Page 23 of 23

También podría gustarte