You are on page 1of 14

Administracin de Base

de Datos
SQL Lenguaje de Definicin de Datos (DDL)

Ing. Timoteo Caldern Letona


WWW.CISTTA.COM

DATA DEFINITION LANGUAGE(DDL)


Data Definition Language (DDL) o Lenguaje de Definicin de Datos, es una parte de
SQL que se utiliza para crear, modificar y eliminar objetos de bases de datos tales como
tablas, procedimientos almacenados, vistas e ndices. A continuacin se presentan los
comandos DDL ms comunes:
CREATE DATABASE
Una base de datos es una coleccin de datos organizados. Una base de datos no es el
mismo que el Sistema de Gestin de Base de Datos Relacional (RDBMS). Un RDBMS
puede tener una o varias bases de datos, mientras que una base de datos slo puede
pertenecer a un RDBMS. Por otra parte, una base de datos puede contener una o ms
tablas, mientras que una tabla slo puede pertenecer a una base de datos.
SINTAXIS:
CREATE DATABASE <database_name>";
EJEMPLO :
CREATE DATABASE dbPrueba; crea la base de datos dbPrueba
CREATE DATABASE dbFacturacion; crea la base de datos dbFacturacion

USE
La palabra clave USE se utiliza para seleccionar una base de datos en MySQL y SQL
Server. La sintaxis es la siguiente:
USE <database_name>;
Por ejemplo, si desea conectarse a una base de datos llamada "dbFacturacion", puede
escribir lo siguiente:
USE dbFacturacion;

En MySQL, puede acceder a las tablas en varias bases de datos mediante la


especificacin de [Base de datos Nombre].[Nombre de la tabla]. Si la tabla que desea
acceder se encuentra en la base de datos que actualmente utiliza, no hay necesidad de
especificar el nombre de base de datos.
Por ejemplo, si desea acceder a la tabla "TCursos" de la base de datos "dbMatricula" y
tabla "TAlumnos" de la base de datos "dbPersonal", puede escribir lo siguiente:
USE dbFacturacion;
SELECT <campos>
FROM TCursos, dbPersonal.TAlumnos
WHERE <condiciones>;
1

CREATE TABLE
En una base de datos relacional, los datos se almacenan en tablas. La sentencia CREATE
TABLE es uno de los componentes ms fundamentales de SQL.
Antes de sumergirse en la sintaxis SQL para CREATE TABLE, es una buena idea para
entender lo que pasa en una tabla. Una tabla est formada por filas y columnas. Cada
fila representa una sola pieza de los datos, y cada columna puede considerarse como la
representacin de un componente de ese pedazo de datos. Por ejemplo, si tenemos
una tabla para el registro de informacin de los clientes, a continuacin, las columnas
pueden incluir informacin como nombre, apellido, direccin, ciudad, pas y fecha de
nacimiento. Cuando especificamos una tabla, incluimos los encabezados de columna y
el tipo de datos de cada columna. Tambin podemos decidir colocar ciertas limitaciones
o restricciones, para garantizar que los datos almacenados en la tabla tengan sentido.
La sintaxis SQL para CREATE TABLE es:
CREATE TABLE <nombre_tabla<
("column 1" "data type para column 1" [column 1 constraint(s)],
"column 2" "data type para column 2" [column 2 constraint(s)],
...
[table constraint(s)] );

Constraint, significa restriccin o restricciones que se aplican, tanto en la definicin de


las columnas o en la definicin de la tabla
Seis tipos de constraints pueden ser colocados cuando se crea una tabla:
NOT NULL Constraint: Asegura que una columna, no puede tener un valor NULL.
DEFAULT Constraint: Proporciona una valor por default para una columna.
UNIQUE Constraint: Asegura que todos los valores en una columna son diferentes.
CHECK Constraint: Asegura que todos los valores en una columna satisfacen ciertos
criterios.
Primary Key Constraint: Usado para identificar de manera unica una fila en una tabla.
Foreign Key Constraint: Usado para garantizar la integridad referencial de los datos.

EJEMPLO: Crear una tabla TClientes con los campos indicados y las restricciones

CREATE TABLE TCliente


(Id int(3) zerofill Primary Key Auto_Increment, Nombre char(50)
Not Null,
Apellidos char(50) Not Null,
Direccin(50),
Ciudad char(50),
Pais char(25) Default Per,
Fecha_Nac datetime Not Null);

A veces, la estructura de la tabla que necesitamos es igual a otra tabla en la base de


datos. En este caso, tambin podemos utilizar CREATE TABLE para hacer una copia de
la estructura de la tabla, as que no tenemos que escribir todos los nombres de las
columnas, tipos de datos y las limitaciones en detalle. La sintaxis para hacer esto es:
CREATE TABLE <table_name> AS [SQL Statement];

Para copiar la estructura y los datos de la Tabla1 en la Tabla2, podramos escribir la


siguiente
sentencia SQL:
CREATE TABLE Table2 AS
SELECT * FROM Table1;

Para copiar la estructura de la Tabla 1 en la Tabla 2 sin


ningn dato, podramos escribir la siguiente sentencia
SQL:

CREATE TABLE Table2 AS


SELECT * FROM Table1
WHERE 0 = 1;

La clusula WHERE 0 = 1 siempre es falsa. Por lo tanto, ninguna fila de datos se copian
de la Tabla1 a Tabla2. Slo se copia la estructura de la tabla.
En la seccin de CREATE TABLE, mencionamos que es necesario especificar el tipo de
datos para cada columna cuando creamos una tabla. La pregunta que surge es: cules
son los diferentes tipos de datos que podemos almacenar en una tabla? Podemos
agrupar los tipos de datos en :
Numeric
Character String
Date/Datetime
Binary

Numeric

Este tipo de datos almacena valores numricos. Los tipos de datos que caen en esta
categora incluyen Integer, Float, real, numeric o decimal. Las funciones ms comunes
que operan en este tipo de datos incluyen COUNT, SUM, MAX, MIN y AVG.

Character String
Este tipo de datos almacena valores de caracteres. Los dos tipos comunes son CHAR
(n) y VARCHAR (n). El tipo de datos CHAR (n) contiene n caracteres. VARCHAR es un
char variable, lo cual significa que la longitud del campo puede variar. Por ejemplo, un
tipo de datos VARCHAR (10) puede contener hasta 10 caracteres. Pero si los datos es
de slo 8 caracteres de longitud, entonces solamente almacenar 8 caracteres. Las
funciones ms comunes que operan en este tipo de datos, se vern cuando se trate de
Funciones de cadena.

Binary
Este tipo de datos nos permite almacenar objetos binarios en una tabla de base de
datos. Los tipos de datos que caen en esta categora incluyen Blob, Binary y Raw.
Tengamos en cuenta que un campo de tipo de datos binarios no se puede utilizar como
claves, y no se puede construir un ndice de la tabla utilizando una columna binaria.

Date/Datetime
Este tipo de datos nos permite almacenar datos de fecha o de fecha y hora en una tabla
de base de datos. Diferentes bases de datos tienen diferentes implementaciones del
tipo de datos de fecha / fecha y hora. Las funciones comunes que operan en este tipo
de datos se discutirn cuando se trate sobre funciones de fecha.
VIEW (VISTA)
Una vista es una tabla virtual. Una vista consiste en filas y columnas al igual que una
tabla. La diferencia entre una vista y una tabla es que las definiciones son construidas
en base a otras tablas (o vistas), y los datos no son fijos. Si los datos est cambiando en
la tabla subyacente, el mismo cambio se refleja en la vista. Una vista puede ser
construido en base a una sola tabla o varias tablas. Tambin se puede construir en base
a otra vista.
Las Vistas ofrecen las siguientes ventajas:
1. Facilidad de uso: Una vista oculta la complejidad de las tablas de bases de datos de
los usuarios finales. Esencialmente podemos pensar de las vistas como una capa de
abstraccin en el top de las tablas de bases de datos.
2. Ahorro de espacio: Vistas toma muy poco espacio para almacenar, ya que no
almacenan datos reales.
4

3. Seguridad de datos adicionales: Las vistas pueden incluir slo ciertas columnas en
la tabla de manera que slo las columnas no sensibles se incluyen y se exponen al
usuario final. Adems, algunas bases de datos permitir vistas a tener diferentes
configuraciones de seguridad, ocultando as los datos sensibles de las miradas
indiscretas.
CREATE VIEW
Las vistas pueden considerarse como tablas virtuales. En trminos generales, una tabla
tiene un conjunto de definicin, y almacena fsicamente los datos. Una vista tambin
tiene un conjunto de definiciones, que se construye a partir de los datos de una
tabla/tablas, y no almacena fsicamente los datos.
La sintaxis para crear una vista es el siguiente:
CREATE VIEW <view_name> AS <instruccin SQL SELECT> FROM <tabla(s)>;

"Instruccin SQL" puede ser cualquiera de las sentencias SQL de SELECT.


Usemos un ejemplo sencillo para ilustrar. Digamos que tenemos la siguiente tabla:

Table Cliente
Column Name Data Type
Nombre

char(50)

Apellido

char(50)

Direccion

char(50)

Ciudad

char(50)

Pais

char(25)

Fecha_Nac
datetime
y deseamos crear una vista (view) llamado V_Cliente que contenga solamente las
columna: Nombre, Apellido y Pais, entonces escribiriamos lo siguiente:
CREATE VIEW V_Cliente AS SELECT Nombre, Apellido, Pais
FROM Cliente;
Ahora tenermmos una vista llamado V_Cliente con la siguiente estructura:
Vista V_Customer
Column Name Data Type
Nombre

char(50)
5

Apellido

char(50)

Pais

char(25)

Tambien podemos usar una vista para aplicar uniones (joins) a dos tablas. En este caso,
los usuarios ven solamente una vista en lugar de dos tablasn, siendo la instruccin SQL
ms simple. Supongamos que tenemos las siguientes dos tablas:
Tabla Almacen
Nombre_Almacen Ventas Fecha
Lima

1500 Jan-05-1999

Trujillo

250 Jan-07-1999

Arequipa

300 Jan-08-1999

Cusco

700 Jan-08-1999

Tabla Ubicacion
Nombre_region Nombre_almacen
Norte

Trujillo

Norte

Lima

Sur

Arequipa

Cusco
Sur
Y queremos construir una vista que contenga informacin de las ventas por regin.
Formularemos la siguiente instruccin SQL:
CREATE VIEW V_Ventas_Region
AS SELECT A1.Nombre_Region REGION, SUM(A2.Ventas) VENTAS
FROM Ubicacion A1, Almacen A2
WHERE A1.Nombre_Almacen = A2.Nombre_Almacen
GROUP BY A1.Nombre_Region;

Esto nos da una vista, V_Ventas_Region, que se ha definido para almacenar los
registros de ventas por ubicacin. Ahora bien, si queremos conocer el contenido de esta
vista, escribimos:
SELECT * FROM V_Ventas_Region;

Resultado:???
6

DROP TABLE
A veces podemos decidir deshacernos de una tabla en la base de datos. De hecho, sera
problemtico si no podemos hacerlo, porque esto podra crear una pesadilla de
mantenimiento para el DBMS. Afortunadamente, SQL nos permite hacerlo, ya que
podemos utilizar el comando DROP TABLE, cuya sintaxis es:
DROP TABLE <nombre_tabla>;
Si quisiramos eliminar la tabla Cliente que hemos creado en la seccin CREATE TABLE,
simplemente escribimos,
DROP TABLE cliente;

Se puede eliminar mltiples tablas al mismo tiempo


Es posible colocar ms de una tabla a la vez. Para ello, se coloca la lista de los nombres
de todas las tablas que se quieren eliminar separados por coma despus de DROP
TABLE. Por ejemplo, si queremos eliminar la tabla User_Detalles y la Lista_Trabajos
juntos, podemos emitir la siguiente sentencia SQL:
DROP TABLE User_Detalles, Lista_Trabajos;

IF EXISTS
Cuando tratamos de eliminar una tabla que no existe, se producir un error. Para evitar
que este tipo de error suceda, algunas bases de datos como MySQL y Oracle permiten
una opcin "IF EXISTS" frase entre DROP TABLE y el nombre (s) de tabla. Esto le dice a
la base de datos ejecutar la sentencia DROP TABLE slo si la tabla ya existe. Si no existe
la tabla, nada se ejecuta y no hay ningn mensaje de error. El siguiente es un ejemplo
de un DROP TABLE IF EXISTS declaracin:
DROP TABLE IF EXISTS Cliente;

DROP DATABASE
A veces podemos decidir eliminar una base de datos completa en el DBMS(Data Base
DROP DATABASE <nombre_base_de_datos>;
Management System). De hecho, si no podemos hacerlo, estaramos frente a un
problema de mantenimiento. Afortunadamente, SQL nos permite hacerlo, ya que
podemos utilizar el comando DROP DATABASE, cuya sintaxis es:
7

As, si deseamos quitar la base de datos dbFacturacion, simplemente escribiramos:


DROP DATABASE dbFacturacion;
EATE VIEW <view_name> AS <instruccin SQL SELECT> FROM <tabla(s)>;
Tengamos en cuenta que cualquier tabla que todava est en la base de datos tambin
desaparecer una vez que se Dropea la base de datos.
TRUNCATE TABLE
A veces queremos deshacernos de todos los datos contenidos en una tabla. Una forma
de hacer esto es con DROP TABLE, que vimos en la ltima seccin. Pero si lo que
deseamos simplemente es borrar los datos, pero no la misma tabla? Para ello, podemos
utilizar el comando TRUNCATE TABLE, cuya sintaxis es:
TRUNCATE TABLE <nombre_tabla>;

As, si deseamos quitar los datos de la tabla Cliente, simplemente escribiramos:


TRUNCATE TABLE Cliente;
EATE VIEW <view_name> AS <instruccin SQL SELECT> FROM <tabla(s)>;
Tengamos en cuenta que el comando TRUNCATE TABLE no puede eliminar las filas de
datos que violen FOREIGN KEY u otras restricciones.

Truncate Table vs Delete


Funcionalmente, las siguientes dos instrucciones SQL son equivalentes. Ambos borrar
todas las filas de la tabla Cliente.
TRUNCATE TABLE Cliente;
DELETE TABLE Cliente;
y
EATE VIEW <view_name> AS
EATE VIEW <view_name> AS
SQL SELECT>
<instruccin
SQLdel
SELECT>
La<instruccin
diferencia entre
los dos FROM
est en la cantidad
de recursos
sistemaFROM
se consumen.
<tabla(s)>;
<tabla(s)>;
DELETE FROM requiere ms recursos del sistema,
y por lo tanto lleva ms tiempo en
completarse, ya que el DBMS tiene que registrar todos los cambios de una fila a la vez
en el registro de transacciones, mientras que una operacin de TRUNCATE TABLE no
registra el cambio de una fila a la vez, por lo que se puede completar ms rpidamente.
ALTER TABLE
Una vez que se crea una tabla en la base de datos, hay muchas ocasiones en las que uno
puede desear cambiar la estructura de la tabla. En general, la sintaxis SQL para ALTER
TABLE es:
8

ALTER TABLE <nombre_tabla> [especificaciones de ALTER]

[especificaciones de ALTER] depende del tipo de alteracin que deseamos realizar. Se


tiene una serie de cambios comunes tales como:
1.

Add Column

2.

Modify Column

3.

Rename Column

4.

Drop Column

5.

Add Index

6.

Drop Index

7.

Add Constraint

8.

Drop Constraint

1. ADD COLUMN
Permite agregar una columna a una tabla. Para ello, especificamos que queremos
cambiar la estructura de la tabla mediante el comando ALTER TABLE, seguido por
el comando ADD para decirle al DBMS que queremos aadir una columna.
Sintaxis:
ALTER TABLE <nombre_tabla> ADD (nombre_columna tipo_dato);

Veamos un ejemplo: supongamos que nuestro punto de partida es la tabla cliente:


Table Cliente
Column Name
Data Type
Nombre
char(50)
Apellido
char(50)
Direccion
char(50)
Ciudad
char(50)
Pais
char(25)
Fecha_nac
datetime
Y queremos agregar una columna llamada "Genero". Escribiremos en SQL:
ALTER TABLE ( ADD (Genero CHAR (1));

Resultando la estructura de la tabla :

Table Cliente
Column Name
Nombre

Data Type
char(50)

Apellido

char(50)

Direccion

char(50)

Ciudad

char(50)

Pais

char(25)

Fecha_nac

datetime

Genero

char(1)

Tambien es posible aadir mltiples columnas.


Prctica de Aprendizaje: Aadir a la tabla cliente las columnas e-mail y telfono.
2. MODIFY COLUMN
A veces tenemos que cambiar el tipo de datos de una columna. Para ello, utilizamos
el comando ALTER TABLE Modify Colum, cuya sintaxis es:
ALTER TABLE <nombre_tabla> MODIFY (nombre_columna nuevo_tipo_dato);
Por ejemplo, si deseamos modificar en la tabla Cliente el tipo de datos para la
columna direccion a Varchar(100), entonces escribiremos:
ALTER TABLE Cliente MODIFY Direccion Varchar(100);
Resultando la estructura de la tabla:
Table Cliente
Column Name
Data Type
Nombre
char(50)
Apellido

char(50)

Direccion

Varchar(100)

Ciudad

char(50)

Pais

char(25)

3. CHANGE COLUMN
Permite cambiar el nombre de una columna, para lo cual usamos el
comando ALTER TABLE con la siguiene sintaxis:
ALTER TABLE <nombre_tabla> CHANGE columna1 columna2 [tipo_dato];

Ejemplo: modificar el nombre de la columna Direccion a Dir para la tabla Cliente


10

ALTER TABLE Cliente CHANGE Direccion Dir char(50);

4. DROP COLUMN
A veces vamos a querer eliminar una columna de una tabla existente en SQL. Para
ello, especificamos que queremos cambiar la estructura de la tabla mediante el
comando ALTER TABLE, seguido de una especificacin que indica que queremos
eliminar una columna.
Sintaxis:
ALTER TABLE <nombre_tabla> DROP <nombre_columna>;
Ejemplo: Eliminar el campo Pais de la tabla Cliente:
ALTER TABLE Cliente DROP Pais;

5. ADD INDEX
Permite aadir un indice a la tabla, despues de haber creado la tabla. El ndice se
aade para acelerar las consultas que involucran esta tabla. Para hacer esto en SQL,
especificamos que queremos cambiar la estructura de la tabla mediante el comando
ALTER TABLE, seguido por el comando ADD INDEX para decirle al DBMS que
queremos aadir un ndice.
Sintaxis:
ALTER TABLE <nombre_tabla> ADD INDEX (<nombre_indice>(<nombre_columna>);

Ejemplo: Aadir un indice a la tabla cliente en la columna Pais:


ALTER TABLE Cliente ADD INDEX idx_pais(Pais);

INDEX (INDICES)
Los ndices nos ayudan a recuperar datos de las tablas en forma rpida. Usemos un
ejemplo para ilustrar este punto: Digamos que estamos interesados en leer acerca de
un tema en un libro de programacin con SQL. En lugar de leer el libro desde el principio
hasta que encontremos una seccin sobre la programacin con SQL, es mucho ms
rpido ir a la seccin de ndice al final del libro, localizamos las pginas que contienen
informacin sobre el tema, y luego ir directamente a estas pginas . Ir al ndice primero
11

nos ahorra tiempo y es, con mucho, un mtodo ms eficiente para la localizacin de la
informacin que necesitamos.
El mismo principio se aplica para recuperar datos de una tabla de base de datos. Sin un
ndice, el sistema de base de datos lee a travs de toda la tabla (este proceso se llama
un "table scan") para localizar la informacin deseada. Con el ndice adecuado en el
lugar, el sistema de base de datos puede pasar primero por el ndice para localizar el
origen de recuperacin de los datos, y luego ir a estos lugares directamente para
obtener los datos necesarios.
Por lo tanto, a veces es deseable crear ndices en las tablas. Un ndice puede incluir una
o ms columnas. A continuacin se discuten algunas estrategias generales en la
construccin y el uso de un ndice:
1. Construir ndices sobre columnas de tipo entero
Los enteros ocupan menos espacio para almacenar, lo que significa que la consulta
ser ms rpida.
2. Mantenga el ndice lo ms estrecha posible
ndices estrechos ocupan menos espacio, requieren menos tiempo para procesar,
que a su vez significa que la consulta se ejecutar ms rpido.
3. El orden de la Columna es importante
Para los ndices que abarcan varias columnas, el orden de las columnas en el ndice
es importante. Lo ms recomendable es utilizar primero la columna con la
cardinalidad ms baja, y luego la columna con la cardinalidad ms alta. Cardinalidad
Recall significa que el nmero de valores distintos de esa columna. As; si SELECT
DISTINCT (COLUMN1) FROM nombre_tabla; devuelve 5, eso significa que la
cardinalidad de COLUMN1 es 5.
4. Asegrese de que la columna para la que est construyendo un ndice se declare
NOT NULL
Esto puede disminuir el tamao del ndice, que a su vez acelerar la consulta.
5. Construir un ndice slo cuando sea necesario
Las ventajas de utilizar un ndice no vienen sin un costo. Los ndices ocupan espacio
en disco, y van a causar operaciones como INSERT, UPDATE y DELETE, ya que cada
vez que una de estas operaciones se lleva a cabo, no slo el sistema de base de datos
necesita actualizar los valores de la tabla, tambin necesita actualizar los ndices.

12

No hay reglas fijas sobre cmo construir los ndices y decidir qu ndices requiere
construir a menudo se trata de un proceso iterativo en el tiempo.
CREATE INDEX
Como mencionamos en la seccin sobre el Index, una tabla de indice a SQL ejecutar
rpido una consulta. La sintaxis para la creacin de un ndice es:
CREATE INDEX <nombre_ndice> ON <nombre_tabla>(nombre_columna);
Note que un ndice puede considerar slo una tabla. No podemos construir ndices
sobre mltiples tablas. Supongamos que tenemos la siguiente tabla:
Table Customer
Column Name Data Type
Nombre

char(50)

Apellido

char(50)

Direccion

char(50)

Ciudad

char(50)

Pais

char(25)

Fecha_nac
datetime
y queremos crear un ndice sobre la columna Apellido, entonces escribiramos:
CREATE INDEX idx_cliente_apellido ON Cliente(Apellido);

Si deseamos crear un ndice sobre las columnas Ciudad y Pas, escribiramos:


CREATE INDEX idx_cliente_ciudadPais ON Cliente(Ciudad, Pais);
Un ndice simple es un ndice sobre una columna, mientras que
ndice compuesto es un ndice sobre dos o ms columnas.
No hay una regla fija sobre como denominar un ndice. El mtodo generalmente
aceptado es colocar un prefijo, tal como idx_, para evitar confusiones con otros
objetos de la base de datos

un

13

You might also like