Your SlideShare is downloading. ×
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
DDL oracle - base de datos
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

DDL oracle - base de datos

1,488

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,488
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
63
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 enlos 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. Luegoveremos la sintáxis completa del comando CREATE TABLE. Por ahora para crear unatabla tenemos suficiente con la siguiente.SintáxisCREATE 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 suestructura. 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 VentasToda tabla tiene una clave primaria. La clave primaria es aquella que identifica a una solatupla (fila) de esa tabla. Representaremos los campos que son clave primaria con elsí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 ladefinición de una tabla, siempre tendremos que poner NOT NULL en el campo que esclave primaria.Las claves primarias serán aquellas que nos permitirán relaccionar las filas de una tablacon 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 ORACLEOracle 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 TipoCOD_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 zonasSQL>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 puededefinir 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 primaria1.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 delatributo 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 filascorrespondientes de la tabla PERSONAS con esa provincia sean eliminadas, se añadirá lacláusula ON DELETE CASCADE en la opción REFERENCES:Fichero cascadaCREATE 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 droppedSQL> 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 restrinombreCREATE 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 PERSONASSQL> 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 NUMBERCondiciones: 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 TABLALas 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áxisALTER 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áxisALTER TABLE nombre_tablaMODIFY (columna, …);RESUMEN DE ALTER TABLE • La sintáxis de ALTER TABLE es la siguiente:SintáxisALTER 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 NUMBERPara 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 hubiesemosescrito: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 luegohaciendo 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 haceinternamente 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 XA continuación vamos a modificar la tabla con la orden MODIFY y se cambia ladefinició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 variosfactores: 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 tablaejemplo. 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_tablaADD CONSTRAINT nombreconstraintVeamos 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 violadaPrá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 columnaCONSTRAINT_NAME de la tabla USER_CONSTRAINTSSQL> SELECT CONSTRAINT_NAME FROM USER_COSNTRAINTS WHERE TABLE_NAME=’EMPLE’;2.2.2. BORRADO DE RESTRICCIONES.SintáxisALTER TABLE nombre_tablaDROP 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

×