Está en la página 1de 160

Programa Nacional de Informtica

Implementacin de Base de Datos con


MySQL

MANUAL DEL PARTICIPANTE


www.fullengineeringbook.net
INDICE

Capitulo 1: Introduccin a MySQL ....................................................... 1


Historia de MySQL ...................................................................................................... 2
Instalar el servidor MySQL ........................................................................................... 2
Configurar el Servidor ................................................................................................. 7
Preguntas de Repaso................................................................................................. 16

Capitulo 2: Las Bases de Datos.......................................................... 17


Conceptos Bsicos .................................................................................................... 17
Dato..................................................................................................................... 17
Base de datos........................................................................................................ 17
SGBD (DBMS) ....................................................................................................... 18
Consulta ............................................................................................................... 18
Redundancia de datos ............................................................................................ 18
Inconsistencia de datos .......................................................................................... 18
Integridad de datos................................................................................................ 18
Diseo de Base de Datos ........................................................................................... 19
Modelamiento de bases de datos ............................................................................. 19
Modelo Entidad-Relacin............................................................................................ 21
Entidad................................................................................................................. 22
Conjunto de entidades ......................................................................................... 22
Atributo ............................................................................................................. 22
Dominio ............................................................................................................. 23
Relacin................................................................................................................ 23
Interrelacin....................................................................................................... 23
Grado ................................................................................................................ 24
Clave.................................................................................................................... 24
Clave................................................................................................................. 25
Claves candidatas .................................................................................................. 25
Clave principal....................................................................................................... 26
Claves de interrelaciones ........................................................................................ 26
Entidades fuertes y dbiles...................................................................................... 26
Dependencia de existencia ...................................................................................... 26
Generalizacin ....................................................................................................... 27
Especializacin ...................................................................................................... 27
Representacin de entidades y relaciones ................................................................. 28
Entidad .............................................................................................................. 28
Atributo ............................................................................................................. 29
Interrelacin....................................................................................................... 29
Dominio ............................................................................................................. 30
Diagrama ........................................................................................................... 30
Modelo Relacional ..................................................................................................... 31
Relacin................................................................................................................ 31
Tupla.................................................................................................................... 32
Atributo ................................................................................................................ 32
Nulo (NULL) .......................................................................................................... 32
Dominio................................................................................................................ 33
Modelo relacional ................................................................................................... 33
Cardinalidad .......................................................................................................... 34
Grado ................................................................................................................... 34
Esquema .............................................................................................................. 34
Instancia .............................................................................................................. 34
Clave.................................................................................................................... 35

www.fullengineeringbook.net
Interrelacin ......................................................................................................... 35
Ejemplo de un modelo Relacional................................................................................ 36
Preguntas de Repaso................................................................................................. 37

Capitulo 3: Tipos de datos ................................................................. 39


Tipos de datos de cadenas de caracteres ..................................................................... 39
CHAR ................................................................................................................... 39
CHAR() ................................................................................................................. 39
VARCHAR() ........................................................................................................... 40
Tipos de datos enteros .............................................................................................. 40
TINYINT................................................................................................................ 40
BIT, BOOL, BOOLEAN ............................................................................................. 40
MEDIUMINT .......................................................................................................... 40
INT ...................................................................................................................... 40
INTEGER............................................................................................................... 41
BIGINT ................................................................................................................. 41
Tipos de datos en coma flotante ................................................................................. 41
FLOAT .................................................................................................................. 41
FLOAT() ................................................................................................................ 41
DOUBLE................................................................................................................ 42
DOUBLE PRECISION, REAL...................................................................................... 42
DECIMAL .............................................................................................................. 42
DEC, NUMERIC, FIXED............................................................................................ 43
Tipos de datos de fecha y hora ................................................................................... 43
DATE.................................................................................................................... 43
DATETIME............................................................................................................. 43
TIMESTAMP........................................................................................................... 43
TIME .................................................................................................................... 44
YEAR .................................................................................................................... 44
Tipos de datos para datos sin tipo o grandes bloques de datos ....................................... 44
TINYBLOB, TINYTEXT ............................................................................................. 44
BLOB, TEXT........................................................................................................... 44
MEDIUMBLOB, MEDIUMTEXT ................................................................................... 45
LONGBLOB, LONGTEXT........................................................................................... 45
Tipos enumerados y conjuntos ................................................................................... 45
ENUM ................................................................................................................... 45
SET ...................................................................................................................... 45
Preguntas de Repaso................................................................................................. 46

Capitulo 4: El cliente MySQL .............................................................. 47


El Cliente MySQL ...................................................................................................... 47
Consultar la base de datos ...................................................................................... 49
Usuarios y privilegios.............................................................................................. 49
Creacin de bases de datos y tablas............................................................................ 50
Crear base de datos ............................................................................................... 50
Creacin de Tablas................................................................................................. 51
Valores nulos...................................................................................................... 53
Valores por defecto ............................................................................................. 53
Claves primarias ................................................................................................. 54
Columnas autoincrementadas ............................................................................... 54
Comentarios ....................................................................................................... 55
Indices ................................................................................................................. 55
Claves primarias ................................................................................................. 55
ndices .............................................................................................................. 56
Claves nicas...................................................................................................... 57
Claves forneas ..................................................................................................... 58
Motor de almacenamiento ....................................................................................... 62
Verificaciones ........................................................................................................ 63
Eliminar Tablas ...................................................................................................... 64

www.fullengineeringbook.net
Eliminar una base de datos ........................................................................................ 65
Preguntas de Repaso................................................................................................. 66

Capitulo 5: Manipulacin de Datos................................................... 67


Insertar Registros ..................................................................................................... 67
Reemplazar registros ................................................................................................ 71
Actualizar Registros .................................................................................................. 73
Eliminar Registros..................................................................................................... 77
Vaciar una tabla ....................................................................................................... 78
Preguntas de Repaso................................................................................................. 79

Capitulo 6: Seleccin de Datos .......................................................... 81


Forma incondicional .................................................................................................. 81
Limitar las columnas ................................................................................................. 82
Alias ....................................................................................................................... 83
Mostrar Registros Repetidos ....................................................................................... 84
Limitar las filas en la seleccin de registros .................................................................. 85
Agrupar filas ............................................................................................................ 86
Clusula HAVING ...................................................................................................... 88
Ordenar resultados ................................................................................................... 89
Limitar la salida del nmero de registros ..................................................................... 89
Preguntas de Repaso................................................................................................. 91

Capitulo 7: Operadores del lenguaje SQL .......................................... 93


Operador de asignacin ............................................................................................. 93
Operadores lgicos ................................................................................................... 95
Operador Y .............................................................................................................. 95
Operador O .............................................................................................................. 96
Operador O exclusivo ................................................................................................ 96
Operador de negacin ............................................................................................... 97
Operadores de comparacin ....................................................................................... 97
Operador de igualdad ............................................................................................. 97
Operador de igualdad con NULL seguro..................................................................... 98
Operador de desigualdad ........................................................................................ 99
Operadores de comparacin de magnitud ................................................................. 99
Verificacin de NULL..............................................................................................100
Verificar pertenencia a un rango .............................................................................100
Eleccin de no nulos..............................................................................................101
Valores mximo y mnimo de una lista.....................................................................102
Verificar conjuntos ................................................................................................103
Verificar nulos ......................................................................................................103
Encontrar intervalo ...............................................................................................104
Operadores aritmticos ............................................................................................104
Operador de adicin o suma ...................................................................................105
Operador de sustraccin o resta .............................................................................105
Operador unitario menos .......................................................................................105
Operador de producto o multiplicacin .....................................................................106
Operador de cociente o divisin ..............................................................................106
Operador de divisin entera ...................................................................................106
Operadores de control de flujo ..................................................................................107
Operador CASE.....................................................................................................107
Operadores para cadenas .........................................................................................108
Operador LIKE ......................................................................................................108
Operador NOT LIKE ...............................................................................................110
Operadores REGEXP y RLIKE ..................................................................................111
Precedencia de operadores .......................................................................................112
Parntesis...............................................................................................................113
Preguntas de Repaso................................................................................................114

www.fullengineeringbook.net
Capitulo 8: Consultas MultiTabla ..................................................... 115
Producto cartesiano .................................................................................................115
Composicin (Join) ..................................................................................................117
Composiciones internas .........................................................................................117
Composicin interna natural ...................................................................................119
Composiciones externas ........................................................................................121
Composicin externa izquierda.............................................................................122
Composicin externa derecha ..............................................................................123
Composiciones naturales externas........................................................................125
Uniones ..................................................................................................................126
Preguntas de Repaso................................................................................................129

Capitulo 9: Usuarios y privilegios .................................................... 131


Niveles de privilegios................................................................................................131
Globales ..............................................................................................................132
De base de datos ..................................................................................................132
De tabla...............................................................................................................132
De columna..........................................................................................................132
De rutina .............................................................................................................132
Crear usuarios.........................................................................................................132
Conceder privilegios .................................................................................................133
Revocar privilegios...................................................................................................135
Mostrar los privilegios de un usuario ..........................................................................136
Nombres de usuarios y contraseas ...........................................................................136
Borrar usuarios........................................................................................................137
Preguntas de Repaso................................................................................................139

Capitulo 10: Importar y exportar datos........................................... 141


Exportar a otros archivos..........................................................................................141
Importar Datos........................................................................................................143
Preguntas de Repaso................................................................................................146

Capitulo 11: phpMyAdmin ............................................................... 147


Estructura...............................................................................................................149
SQL .......................................................................................................................151
Exportar .................................................................................................................152
Preguntas de Repaso................................................................................................154

www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 1
Introduccin a MySQL

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Definir brevemente que es MySQL.
 Conocer las caractersticas principales de MySQL.
 Conocer la historia de MySQL
 Instalar el servidor MySQL.
 Configurar el servidor MySQL.

MySQL es un gestor de base de datos sencillo de usar e increblemente rpido. Tambin


es uno de los motores de base de datos ms usados en Internet, la principal razn de
esto es que es gratis para aplicaciones no comerciales.

Las caractersticas principales de MySQL son:

Es un gestor de base de datos. Una base de datos es un conjunto de datos y un


gestor de base de datos es una aplicacin capaz de manejar este conjunto de
datos de manera eficiente y cmoda.

Es una base de datos relacional. Una base de datos relacional es un conjunto de


datos que estn almacenados en tablas entre las cuales se establecen unas
relaciones para manejar los datos de una forma eficiente y segura. Para usar y
gestionar una base de datos relacional se usa el lenguaje estndar de
programacin SQL.

Es Open Source. El cdigo fuente de MySQL se puede descargar y est accesible


a cualquiera, por otra parte, usa la licencia GPL para aplicaciones no comerciales.

Es una base de datos muy rpida, segura y fcil de usar. Gracias a la


colaboracin de muchos usuarios, la base de datos se ha ido mejorando
optimizndose en velocidad. Por eso es una de las bases de datos ms usadas en
Internet.

Programa Nacional de Informtica 1

www.fullengineeringbook.net
MySQL
Manual del Participante

Historia de MySQL
El lenguaje SQL para acceder a bases de datos relacionales, fue lanzado al mercado por
IBM al mercado all por 1981, despus de varios aos de desarrollo y en 1983 empez a
vender DB2, un sistema de gestin de bases de datos que se hizo muy popular.
Posteriormente, el Instituto de Estndares Nacional Americano(ANSI) adopt el SQL
como estndar para el acceso a bases de datos relacionales, y al a siguiente, se
convirti en estndar ISO.

Actualmente, se encuentra en fase de estandarizacin la versin 3, que ser un lenguaje


por s mismo, y no necesitar de otros para actuar, nuevos tipos de datos complejos.

Alrededor de la dcada del 90, Michael Windenis (monty@analytikerna.se) comenz a


usar mSQL (http://www.hughes.com.au/) para conectar tablas usando sus propias rutinas
de bajo nivel (ISAM). Sin embargo, despus de algunos testeos llego a la conclusin que
mSQL no era lo suficientemente rpido ni flexible para sus necesidades. De todo esto
surgi en una nueva interfaz SQL (claro que con cdigo mas portable) con algunas
apariencias similares en la API de C y en los nombres y funciones de muchos de sus
programas. Esto haba sido hecho para lograr con relativa facilidad portar aplicaciones y
utilidades de MiniSQL a MySQL.

El Origen del nombre MySQL no esta perfectamente claro. Algunos lo atribuyen al hecho
de que un gran numero de nuestras librerias y herramientas le asignamos el prefijo My
por costumbre. Sin embargo la hija de Monty es ademas llamada My. Asi que cual de las
dos razones da el nombre a MySQL es aun un misterio.

Instalar el servidor MySQL


A continuacin veremos ahora cmo instalar las aplicaciones y paquetes necesarios para
poder trabajar con MySQL.

Lo primero que debemos hacer es obtener el paquete de instalacin desde el servidor en


Internet: http://www.mysql.com/, y despus instalarlo en nuestro computador.

Se puede descargar el servidor MySQL y los clientes estndar directamente desde la


siguiente direccin: http://www.mysql.com/downloads/index.html. Hay que elegir la versin
que se quiere descargar, de preferencia la recomendada, ya que suele ser la ms
actualizada y estable.

www.fullengineeringbook.net
MySQL
Manual del Participante

Una vez seleccionada la versin, hay que elegir la distribucin adecuada al sistema
operativo que usemos: Windows, Linux, Solaris, etc. El archivo descargado se podr
instalar directamente.

Terminar de instalar el servidor depende en gran medida de cada caso, y es mejor


remitirse a la documentacin facilitada por MySQL junto a cada paquete.

En nuestro caso, vamos a instalar un paquete de MySQL para Windows, especficamente,


se trata de la version 4.1 que es una de las mas estables, que encontramos al momento
de hacer el presente manual.

Despus de descargar el paquete de instalacin deMySQL para Windows, se debe


ejecutar el archivo SETUP.EXE y de inmediato aparecer la siguiente pantalla. (ver figura
siguiente).

Aunque la informacin de esta pantalla se encuentra en ingls, no es difcil interpretar que


se trata de la panatalla de bienvenida. Hacemos click en el botn NEXT para ir a la
pantalla siguiente, para ver el tipo de instalacin que debemos hacer (Ver figura
siguiente).

Programa Nacional de Informtica 3

www.fullengineeringbook.net
MySQL
Manual del Participante

En la figura anterior, se muestran tres opciones:


Tpica: Que nos genera una instalacin por defecto, es decir lo que MySQL
considera que es lo mejor.
Completa: No dejamos nada sin instalar.
Personalizada: Elegimos lo que deseamos y lo que no deseamos instalar.

Elegimos la opcin CUSTOM (Personalizada) y continuamos presionando el botn NEXT


para que aparezca la siguiente pantalla (figura siguiente) en donde se escogera,
adicionalmente, algunos componentes que la configuracin Tpica no instala.

www.fullengineeringbook.net
MySQL
Manual del Participante

El nico componente que quedara sin instalar en este caso sera los componentes de
desarrollo (Developer Components) que nos proporciona ejemplos de sentencias para
utilizar en MySQL, as que si usted considera que los va a necesitar debe seleccionarlo
para instalarlo.

Las opciones disponibles de esta ventana son:


MySQL Server: Instala los ejecutables MySQL Server.
Client Programs: Instala programas clientes para poder manipular nuestro
prximo servidor.
Documentation: No necesita ser experto para saber que es la Documentacin.
Developer Components: Diversos ejemplos de MySQL.

Despus de elegir los componentes que vamos a instalar continuamos presionando el


botn NEXT y aparecer lasiguiente pantalla.

La pantalla anterior simplemente muestra el lugar fsico donde se instalar y la opcin que
nosotros elegimos para instalar MySQL Server.

A continuacin hacemos click en el botn INSTALL para iniciar la instalacin. Despus de


algunos instantes aparece la siguiente pantalla, en la cual se nos pide registrarnos (ver
figura siguiente).

Programa Nacional de Informtica 5

www.fullengineeringbook.net
MySQL
Manual del Participante

En la instalacin, MySQL nos pide que nos registremos, esta es una forma de tener un
registro de las personas que usan su software y para nosotros una manera de estar al
tanto de las ltimas novedades del mismo.

En nuestro caso, vamos a elegir SALTAR la registracin por que ya lo hemos hecho con
anterioridad. Hacemos clic en el botn NEXT para continuar y aparecer la siguiente
pantalla.

En esta ventana, MySQL Server nos pide confirmacin sobre si queremos continuar con
la configuracin del MySQL, accin que le corresponderemos con un SI para poder dejar
6

www.fullengineeringbook.net
MySQL
Manual del Participante

funcionando nuestro Server ahora. A continuacin debemos hacer click en el botn


FINISH para terminar con la instalacin y pasar a la configuracin del servidor

Configurar el Servidor
La primera pantalla es para saber que tipo de configuracin llevaremos adelante (ver
figura siguiente).

Los tipos de configracin que se aprecian, en esta ventana, son las siguientes.

Detailed Configuration: Una configuracin DETALLADA es la que llevaremos


adelante para no dejar en manos de nadie lo que nosotros podemos hacer.

Standard Configuration: Una configuracin ESTNDAR no la recomiendo por que


deja en manos de MySQL cosas importantes que despus deberemos saber para
poder acceder a nuestro servidor y eso complicar nuestra tarea.

En nuestro caso, seleccionaremos Detailed Configuration marcado y haremos click en el


botn NEXT para continuar y aparezca la ventana de la configuracin de la instancia del
servidor de MySQL (Ver figura siguiente).

Programa Nacional de Informtica 7

www.fullengineeringbook.net
MySQL
Manual del Participante

En esta ventana, las opciones que se muestran son muy importantes, ya que de lo que
aqu elijamos depender la utilizacin de recursos y comportamiento de nuestro servidor.

Developer Machine: Si tu PC ser una PC de desarrollo de aplicaciones donde


solo lo tendrs MySQL para realizar tus pruebas y depuracin entonces esta
opcin es ideal ya que consume bajos recursos y nos da toda la funcionalidad que
necesitamos.

Server Machine: Una PC servidor que como dice su nombre dar servicio de Base
de Datos a una RED, consume un poco ms de recursos que la opcin anterior
pero nos da una buena performance a la hora de altos pedidos de datos.

Dedicated MySQL Server Machine: Un servidor dedicado es una PC puesta con


toda la potencia que posee a brindar servicio de Base de Datos a una RED y a
Internet, los recursos consumidos son altos, pero se supone que esta PC est
prcticamente disponible 100% para el servidor MySQL.

Elijamos la opcin que ms se adecue a nuestras necesidades, en nuestro caso lo


dejamos como DEVELOPER MACHINE y hacemos click en el botn NEXT para
continuar, y podamos seleccionar el tipo de base de datos a usar.

www.fullengineeringbook.net
MySQL
Manual del Participante

Las opciones que aparecen en esta ventana son las siguientes:

Multifunctional Database: Aqu poseemos una Base multifuncional que nos dar
alta velocidad de almacenamiento en MyISAM y alta transacciones en InnoDB,
pero perdemos un poco de seguridad de datos.

Transactional Database Only: Opcin optimizada para aplicaciones servidores y


transacciones de aplicaciones WEB. Hace InnoDB como el motor de
almacenamiento principal, pero MyISAM tambin puede ser usado, est opcin es
muy recomendada para CASI TODOS LOS CASOS ya que las aplicaciones WEB
con PHP se ejecutan de manera excelente.

Non- Transactional Database Only: No se usa prcticamente pero es para


aplicaciones simples WEB, monitoriza los log de las aplicaciones y analiza los
programas que usan el servidor. Solo MyISAM es activado para el almacenamiento
de datos.

En nuestro caso vamos a elegir la opcin del medio, es decir TRANSACTIONAL


DATABASE ONLY, y luego hacemos click en NEXT para continuar y configurar la ruta
donde se almacenarn nuestras Base de Datos (ver figura siguiente).

Programa Nacional de Informtica 9

www.fullengineeringbook.net
MySQL
Manual del Participante

En la ventana de la figura anterio solo veremos donde se instalan las bases de datos que
crearemos para nuestro uso particular. Podemos usar una unidad de disco que no sea
aquella en la que estamos instalando el Servidor(por seguridad), pero no se frecuenta
hacerlo.

Las bases de datos estarn en C:\Archivos de Programa\MySQL\MySQL Server\Data


Ah podremos sacar los archivos que hacen las bases de datos y las tablas, para poder
exportarlas a otro sitio, o en caso importarlas de otro lugar.

A continuacin hacemos click en el botn NEXT para continuar y configurar la


concurrencia, es decir el numero de usuarios que se conectarn al servidor (ver figura
siguiente).

MySQL permite tener un servidor con muchisimas conexiones a la vez, por eso
necesitamos preparar al servidor para recibirlas, como no queremos hacerlo trabajar de
ms entonces elegimos la mejor opcin para nuestro MySQL Server.

10

www.fullengineeringbook.net
MySQL
Manual del Participante

Las opciones que aparecen en esta ventana son las siguientes:

Decision Support: Un servidor normal de pocas conexiones (20 son asumidas por
defecto) que nos sirve si tenemos un servidor WEB pequeo o es un Server
Developer.

Online Transaction Processing: Un servidor de aplicaciones o un servidor WEB


debe soportar muchas conexiones, por eso esta ser la mejor opcin para ese fin,
500 conexiones son asumidas como defecto dando un soporte muy bueno.

Manual Setting: Si ninguna de las anteriores se pone a la altura de su proyecto


entonces uestes tiene la posibilidad de ponerla manualmente.

Elijan la opcin que mejor se les acomode a sus necesidades. En nuestro caso
seleccionaremos la primera y luego haremos click en el botn NEXT para continuar y
configurar los puertos TCP/IP (ver figura siguiente).

Programa Nacional de Informtica 11

www.fullengineeringbook.net
MySQL
Manual del Participante

Como todas las aplicaciones que se pueden acceder a travs de la RED o desde
INTERNET deben tener un puerto de escucha y envo de datos, MySQL usa el puerto
3306 como puerto por defecto, claro que se puede cambiar, pero mejor dejarlo como est
para no tener problemas con aplicaciones que no se pueden setear.

En caso de programacin en .NET o aplicaciones WEB no hay problemas, por que ambos
se pueden mover a este puerto TCP/IP.

A continuacin haremos click en el botn NEXT para continuar y configurar algunas


opciones de Windows (ver figura siguiente).

Por lo general, MySQL proporciona un nombre para el servicio que instalaremos, por lo
general solo se llamar MySQL, pero podemos abrir el cuadro combinado y elegir entre
otros nombres que nos sugiere.

12

www.fullengineeringbook.net
MySQL
Manual del Participante

En la ventana de la figura anterior debemos asegurarnos que Launch the MySQL


Server automatically est marcado, esto permite que cuando Windows se inicie,
MySQL lo haga tambin automticamente. A continuacin haremos click en el botn
NEXT para continuar y configurar las credenciales del administrador del Server (ver figura
siguiente).

Programa Nacional de Informtica 13

www.fullengineeringbook.net
MySQL
Manual del Participante

Si es la primera vez que instalamos el servidor MySQL en nuestra computadora, entonces


debemos MODIFICAR la contrasea del ROOT.

El ROOT es el administrador del servidor, el ROOT no tiene ninguna restriccin en el


servidor, hace lo que quiere y deshace, por eso es muy importante que le pongamos
contrasea ya alguna mano malvada puede causar daos estragos en nuestro Server.

Asegurmonos que Enable root access from remote machines est activado ya que
esta opcin nos permite acceder como ROOT desde maquinas remotas a donde est
instalado el servidor.

A continuacin debemos hacer click en el botn NEXT para continuar y tener acceso a la
ventana final de la configuracin (Ver figura siguiente)

La ventana de la figura anterior, nos indica que hemos llegado al final de la configuracin,
por lo que haremos clic en EXECUTE y si todo ha sido correcto quedarn todas las
opciones marcadas como correctas.

14

www.fullengineeringbook.net
MySQL
Manual del Participante

Nota
Un problema que encontr con todo esto, es que si lo quieres desinstalar y luego lo reinstalas,
debes borrar la carpeta MySQL Server por completo, por que las sentencias no las cambia y el
servidor ya no funcionar.

Despus de instalar MySQL estaremos en condiciones de poder utilizar MySQL desde la


consola de nuestro computador, en modo de lnea de comandos.

Importante
Opcionalmente, para el aprendizaje de PHP y MySQL se puede instalar el paquete del
APPSERV, que es una instalacin conjunta de APACHE, MySQL y PHP y muy facil de
instalar y usar. Este paquete es el que hemos utilizado para el presente curso.

Programa Nacional de Informtica 15

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Defina brevemente Qu es MySQL?


2. Por que se dice que MySQL es un gestor de base de datos?
3. Por que se dice que MySQL es una base de datos relacional?
4. MySQL es OpenSource. Por qu?
5. En que ao aparece MySQL?
6. Busque en la URL de MySQL y vea cual es la ltima versin ms estable.
7. En la configuracin de MySQL Qu significaconfigurar a nuestra PC como Server
Machine?
8. En la configuracin de MySQL Qu Tipo de base de datos recomendaria para
aplicaciones Web?
9. Si el servidor de MySQL servir con Server para desarrollares Qu tipo de
concurrencia debe elegir?
10. Es posible crear una aplicacin Visual Basic :NET y tener MySQL como soporte de
base de datos?por que?
11. Qu pasara si no le ponemos una contrasea segura al usuario ROOT?

16

www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 2
Las Bases de Datos

Objetivos
Al finalizar este capitulo, el participante aprender :
 Concepto bsicos relacionados con las Base de Datos
 Conceptos relacionados con el diseo de Base de Datos
 Conceptos relacionados al Modelo Entidad-Relacion
 Cmo se representan las entidades y relaciones
 Reconocer los diferentes componentes de un esquema Entidad-Relacion
 Conceptos bsicos relacionados con el modelo relacional.

Conceptos Bsicos
En el presente captulo nos vamos a centrar en repasar, brevemente, conceptos
relacionados a las bases de datos los cuales sern tiles a la hora de trabajar con los
objetos de MySQL.

Dato
Un dato es una informacin que refleja el valor de una caracterstica de un objeto
real, sea concreto o abstracto, o imaginario.

Debe cumplir algunas condiciones, por ejemplo, debe permanecer en el tiempo. En


ese sentido, extrictamente hablando, una edad no es un dato, ya que vara con el
tiempo. El dato sera la fecha de nacimiento, y la edad se calcula a partir de ese
dato y de la fecha actual. Adems, debe tener un significado, y debe ser
manipulable mediante operadores: comparaciones, sumas, restas, etc (por
supuesto, no todos los datos admiten todos los operadores).

Base de datos
Podemos considerar que es un conjunto de datos de varios tipos, organizados e
interrelacionados. Estos datos deben estar libres de redundancias innecesarias y
ser independientes de los programas que los usan.

Programa Nacional de Informtica 17

www.fullengineeringbook.net
MySQL
Manual del Participante

SGBD (DBMS)
Son las siglas de Sistema de Gestin de Bases de Datos, en ingls DBMS,
DataBase Manager System. En este caso, MySQL es un SGBD, o mejor dicho:
nuestro SGBD.

Consulta
Es una peticin al SGBD para que procese un determinado comando SQL. Esto
incluye tanto peticiones de datos como creacin de bases de datos, tablas,
modificaciones, inserciones, etc.

Redundancia de datos
Se dice que hay redundancia de datos cuando la misma informacin es
almacenada varias veces en la misma base de datos. Esto es siempre algo a
evitar, la redundancia dificulta la tarea de modificacin de datos, y es el motivo ms
frecuente de inconsistencia de datos. Adems requiere un mayor espacio de
almacenamiento, que influye en mayor costo y mayor tiempo de acceso a los datos.

Inconsistencia de datos
Slo se produce cuando existe redundancia de datos. La inconsistencia consiste en
que no todas las copias redundantes contienen la misma informacin. As, si
existen diferentes modos de obtener la misma informacin, y esas formas pueden
conducir a datos almacenados en distintos sitios. El problema surge al modificar
esa informacin, si slo cambiamos esos valores en algunos de los lugares en que
se guardan, las consultas que hagamos ms tarde podrn dar como resultado
respuestas inconsistentes (es decir, diferentes). Puede darse el caso de que dos
aplicaciones diferentes proporcionen resultados distintos para el mismo dato.

Integridad de datos
Cuando se trabaja con bases de datos, generalmente los datos se reparten entre
varios archivos. Si, como pasa con MySQL, la base de datos est disponible para
varios usuarios de forma simultnea, deben existir mecanismos que aseguren que
las interrelaciones entre registros se mantengan coherentes, que se respetan las
dependencias de existencia y que las claves nicas no se repitan.

18

www.fullengineeringbook.net
MySQL
Manual del Participante

Por ejemplo, un usuario no debe poder borrar una entidad de una base de datos, si
otro usuario est usando los datos de esa entidad. Este tipo de situaciones son
potencialmente peligrosas, ya que provocan situaciones con frecuencia
imprevistas. Ciertos errores de integridad pueden provocar que una base de datos
deje de ser confiable.

Los problemas de integridad se suelen producir cuando varios usuarios estn


editando datos de la misma base de datos de forma simultnea. Por ejemplo, un
usuario crea un nuevo registro, miestras otro edita uno de los existentes, y un
tercero borra otro. El DBMS debe asegurar que se pueden realizar estas tareas sin
que se produzcan errores que afecten a la integridad de la base de datos.

Diseo de Base de Datos


Cada vez que emprendamos un nuevo proyecto, grande o pequeo, antes de lanzarnos a
escribir cdigo, crear tablas o bases de datos, hay que analizar el problema sobre el
papel. En el caso de las bases de datos, pensaremos sobre qu tipo de informacin
necesitamos guardar, o lo que es ms importante: qu tipo de informacin necesitaremos
obtener de la base de datos. En esto consiste el modelamiento de bases de datos.

Modelamiento de bases de datos


El proceso de trasladar un problema del mundo real a un computador, usando
bases de datos, se denomina modelamiento.

Para el modelamiento de bases de datos es necesario seguir un procedimiento


determinado. Pero, cuando el problema a modelar es sencillo, con frecuencia
estaremos tentados de pasar por alto algunos de los pasos, y crear directamente
bases de datos y tablas. En el caso de las bases de datos, como en cualquier otra
solucin informtica, esto es un gran error. Siempre ser mejor seguir todos los
pasos del diseo, esto nos ahorrar (con toda seguridad) mucho tiempo ms
adelante. Sobre todo si alguna vez tenemos que modificar la base de datos para
corregir errores o para implementar alguna caracterstica nueva, algo que sucede
con mucha frecuencia.

Adems, seguir todo el proceso nos facilitar una documentacin necesaria para
revisar o mantener la aplicacin, ya sea por nosotros mismos o por otros
administradores o programadores.

La primera fase del diseo de una aplicacin (la base de datos, generalmente, es

Programa Nacional de Informtica 19

www.fullengineeringbook.net
MySQL
Manual del Participante

parte de una aplicacin), consiste en hablar con el cliente para saber qu quiere, y
qu necesita realmente.

Esto es una tarea ardua y difcil. Generalmente, los clientes no saben demasiado
sobre programacin y sobre bases de datos, de modo que normalmente, no saben
qu pueden pedir. De hecho, lo ms habitual es que ni siquiera sepan qu es lo
que necesitan.

Los modelos conceptuales ayudan en esta fase del proyecto, ya que facilitan una
forma clara de ver el proceso en su totalidad, puesto que se trata de una
representacin grfica. Adems, los modelos conceptuales no estn orientados a
ningn sistema fsico concreto: tipo de computador, sistema operativo, SGBD, etc.
Ni siquiera tienen una orientacin informtica clara, podran servir igualmente para
explicar a un operario cmo funciona el proceso de forma manual. Esto facilita que
sean comprensibles para personas sin conocimientos de programacin.

Adems de consultar con el cliente, una buena tcnica consiste en observar el


funcionamiento del proceso que se quiere informatizar o modelar. Generalmente
esos procesos ya se realizan, bien de una forma manual, con ayuda de libros o
archivos; o bien con un pequeo apoyo ofimtico.

Con las bases de datos lo ms importante es observar qu tipo de informacin se


necesita, y que parte de ella se necesita con mayor frecuencia. Por supuesto,
modelar ciertos procesos puede proporcionarnos ayudas extra sobre el proceso
manual, pero no debemos intentar que nuestra aplicacin lo haga absolutamente
todo, sino principalmente, aquello que es realmente necesario.

Cuando los programas se crean sin un cliente concreto, ya sea porque se pretende
crear un producto para uso masivo o porque slo lo vamos a usar nosotros, el
papel del cliente lo jugaremos nosotros mismos, pero la experiencia nos ensear
que esto no siempre es una ventaja. Es algo parecido a los que pasa con los
abogados o los mdicos. Se suele decir que "el abogado que se defiende a si
mismo tiene un necio por cliente". En el caso de los programadores esto no es tan
exagerado; pero lo cierto es que, demasiadas veces, los programadores somos
nuestros peores clientes.

Toda esta informacin recogida del cliente debe formar parte de la documentacin.
Nuestra experiencia como programadores debe servir, adems, para ayudar y guiar
al cliente. De este modo podemos hacerle ver posibles "cuellos de botella",
excepciones, mejoras en el proceso, etc. As mismo, hay que explicar al cliente qu
20

www.fullengineeringbook.net
MySQL
Manual del Participante

es exactamente lo que va a obtener. Cuando un cliente recibe un producto que no


esperaba, generalmente no se siente muy inclinado a pagar por l.

Una vez recogidos los datos, el siguiente paso es crear un modelo conceptual. El
modelo ms usado en bases de datos es el modelo Entidad-Relacin.

Muy probablemente, esta es la parte ms difcil de la resolucin del problema. Es la


parte ms "intelectual" del proceso, en el sentido de que es la que ms requerir
pensar. Durante esta fase, seguramente, deberemos tomar ciertas decisiones, que
en cierto modo limitarn en parte el modelo. Cuando esto suceda, no estar de
ms consultar con el cliente para que estas decisiones sean, al menos, aceptadas
por l, y si es posible, que sea el propio cliente el que las plantee.

La siguiente fase es convertir el modelo conceptual en un modelo lgico. Existen


varios modelos lgicos, pero el ms usado, el que mejor se adapta a MySQL y el
que por lo tanto explicaremos aqu, es el modelo Relacional. La conversin entre el
modelo conceptual y el lgico es algo bastante mecnico, aunque no por ello ser
siempre sencillo.

En el caso del modelo lgico relacional, existe un proceso que sirve para verificar
que hemos aplicado bien el modelo, y en caso contrario, corregirlo para que sea
as. Este proceso se llama normalizacin, y tambin es bastante mecnico.

El ltimo paso consiste en codificar el modelo lgico en un modelo fsico. Este


proceso est ligado al DBMS elegido, y es, seguramente, la parte ms sencilla de
aplicar, aunque nos llevar mucho ms tiempo y espacio explicarla, ya que en el
caso del DBMS que nos ocupa (MySQL), se requiere el conocimiento del lenguaje
de consulta SQL.

Modelo Entidad-Relacin
En esencia, el modelo entidad-relacin (E-R), consiste en buscar las entidades que
describan los objetos que intervienen en el problema y las relaciones entre esas
entidades.

Todo esto se plasma en un esquema grfico que tiene por objeto, por una parte, ayudar al
programador durante la codificacin y por otra, al usuario a comprender el problema y el
funcionamiento del programa

A continuacin definiremos algunos conceptos que se usan en el modelo E-R. Estas

Programa Nacional de Informtica 21

www.fullengineeringbook.net
MySQL
Manual del Participante

definiciones nos sern tiles tanto para explicar la teora, como para entendernos entre
nosotros y para comprender otros textos sobre el modelado de bases de datos.

Entidad
Es una representacin de un objeto individual concreto del mundo real. Si
hablamos de personas, tu y yo somos entidades, como individuos. Si hablamos de
vehculos, se tratar de ejemplares concretos de vehculos, identificables por su
matrcula, el nmero de chasis o el de bastidor.

Conjunto de entidades
Es la clase o tipo al que pertenecen entidades con caractersticas comunes.

Cada individuo puede pertenecer a diferentes conjuntos: habitantes de un


pas, empleados de una empresa, miembros de una lista de correo, etc. Con
los vehculos pasa algo similar, pueden pertenecer a conjuntos como un
parque mvil, vehculos de empresa, etc.

En el modelado de bases de datos trabajaremos con conjuntos de entidades,


y no con entidades individuales. La idea es generalizar de modo que el
modelo se ajuste a las diferentes situaciones por las que pasar el proceso
modelado a lo largo de su vida. Ser el usuario final de la base de datos el
que trabaje con entidades. Esas entidades constituirn los datos que
manejar con la ayuda de la base de datos.

Atributo
Cada una de las caractersticas que posee una entidad, y que agrupadas
permiten distingirla de otras entidades del mismo conjunto.

En el caso de las personas, los atributos pueden ser caractersticas como el


nombre y los apellidos, la fecha y lugar de nacimiento, residencia, nmero de
identificacin... Si se trata de una planilla de empleados nos interesarn
otros atributos, como la categora profesional, la antigedad, etc.

En el caso de vehculos, los atributos sern la fecha de fabricacin, modelo,


tipo de motor, matrcula, color, etc.

Segn el conjunto de entidades al que hallamos asignado cada entidad,


algunos de sus atributos podrn ser irrelevantes, y por lo tanto, no
22

www.fullengineeringbook.net
MySQL
Manual del Participante

aparecern; pero tambin pueden ser necesarios otros. Es decir, el conjunto


de atributos que usaremos para una misma entidad depender del conjunto
de entidades al que pertenezca, y por lo tanto del proceso modelado.

Por ejemplo, no elegiremos los mismos atributos para personas cuando


formen parte de modelos diferentes. En un conjunto de entidades para los
socios de una biblioteca, se necesitan ciertos atributos. Estos sern
diferentes para las mismas personas, cuando se trate de un conjunto de
entidades para los clientes de un banco.

Dominio
Conjunto de valores posibles para un atributo.

Una fecha de nacimiento o de matricula tendr casi siempre un dominio,


aunque generalmente se usar el de las fechas posibles. Por ejemplo,
ninguna persona puede haber nacido en una fecha posterior a la actual. Si
esa persona es un empleado de una empresa, su fecha de nacimiento
estar en un dominio tal que actualmente tenga entre 16 y 65 aos. (Por
supuesto, hay excepciones...)

Los nmeros de matrcula tambin tienen un dominio, as como los colores


de chapa o los fabricantes de automviles (slo existe un nmero limitado de
empresas que los fabrican).

Generalmente, los dominios nos sirven para limitar el tamao de los


atributos. Supongamos que una empresa puede tener un mximo de 1000
empleados. Si uno de los atributos es el nmero de empleado, podramos
decir que el dominio de ese atributo es (0,1000).

Con nombres o textos, los dominios limitarn su longitud mxima.

Relacin
Otro concepto que no podemos dejar de definir es el de relacin. Aunque en
realidad, salvo para nombrar el modelo, usaremos el trmino interrelacin, ya que
relacin tiene un significado radicalmente diferente dentro del modelo relacional, y
esto nos puede llevar a error.

Interrelacin
es la asociaciacin o conexin entre conjuntos de entidades.
Programa Nacional de Informtica 23

www.fullengineeringbook.net
MySQL
Manual del Participante

Tengamos los dos conjuntos: de personas y de vehculos. Podemos


encontrar una interrelacin entre ambos conjuntos a la que llamaremos
posee, y que asocie asocie una entidad de cada conjunto, de modo que un
individuo posea un vehculo.

Grado
Nmero de conjuntos de entidades que intervienen en una interrelacin.

De este modo, en la anterior interrelacin intervienen dos entidades, por lo


que diremos que es de grado 2 o binaria. Tambin existen interrelaciones de
grado 3, 4, etc. Pero las ms frecuentes son las interrelaciones binarias.

Podemos establecer una interrelacin ternaria (de grado tres) entre


personas, de modo que dos personas sean padre y madre, respectivamente,
de una tercera.

Existen adems tres tipos distintos de interelaciones binarias, dependiendo


del nmero de entidades del primer conjunto de entidades y del segundo.
As hablaremos de interrelaciones 1:1 (uno a uno), 1:N (uno a muchos) y
N:M (muchos a muchos).

Nuestro ejemplo anterior de "persona posee vehculo" es una interrelacin


de 1:N, ya que cada persona puede no poseer vehculo, poseer uno o
poseer ms de uno. Pero cada vehculo slo puede ser propidad de una
persona. Otras relaciones, como el matrimonio, es de 1:1, o la de amistad,
de N:M.

Clave
Estaremos de acuerdo en que es muy importante poder identificar claramente cada
entidad y cada interrelacin. Esto es necesario para poder referirnos a cada
elemento de un conjunto de entidades o interrelaciones, ya sea para consultarlo,
modificarlo o borrarlo. No deben existir ambigedades en ese sentido.

En principio, cada entidad se puede distinguir de otra por sus atributos. Aunque un
subconjunto de atributos puedan ser iguales en entidades distintas, el conjunto
completo de todos los atributos no se puede repetir nunca. Pero a menudo son slo
ciertos subconjuntos de atributos los que son diferentes para todas las entidades.
24

www.fullengineeringbook.net
MySQL
Manual del Participante

Clave
es un conjunto de atributos que identifican de forma unvoca una entidad.

En nuestro ejemplo de las entidades persona, podemos pensar que de una


forma intuitiva sabemos qu atributos distinguen a dos personas distintas.
Sabemos que el nombre por si mismo, desde luego, no es uno de esos
atributos, ya que hay muchas personas con el mismo nombre. A menudo, el
conjunto de nombre y apellidos puede ser suficiente, pero todos sabemos
que existen ciertos nombres y apellidos comunes que tambin se repiten, y
que esto es ms probable si se trata de personas de la misma familia.

Las personas suelen disponer de un documento de identidad que suele


contener un nmero que es distinto para cada persona. Pero habr
aplicaciones en que este valor tampoco ser una opcin: podemos tener, por
ejemplo, personas en nuestra base de datos de distintas nacionalidades, o
puede que no tengamos acceso a esa informacin (una agenda personal no
suele contener ese tipo de datos), tambin hay personas, como los menores
de edad, que generalmente no disponen de documento de identidad.

Con otros tipos de entidad pasa lo mismo. En el caso de vehculos no


siempre ser necesario almacenar el nmero de matrcula, o tal vez no sea
un valor adecuado para usar como clave (ya veremos ms adelante que en
el esquema fsico es mucho mejor usar valores enteros).

En fin, que en ocasiones, por un motivo u otro, creamos un atributo artificial


para usarlo slo como clave. Esto es perfectamente legal en el modelo E-R,
y se hace frecuentemente porque resulta cmodo y lgico.

Claves candidatas
Una caracterstica que debemos buscar siempre en las claves es que contengan el
nmero mnimo de atributos, siempre que mantengan su funcin. Diremos que una
clave es mnima cuando si se elimina cualquiera de los atributos que la componen,
deja de ser clave. Si en una entidad existe ms de una de estas claves mnimas,
cada una de ellas es una clave candidata.

La Clave candidata es cada una de las claves mnimas existente en un conjunto de


entidades.

Programa Nacional de Informtica 25

www.fullengineeringbook.net
MySQL
Manual del Participante

Clave principal
Si disponemos de varias claves candidatas no usaremos cualquiera de ellas segn
la ocasin. Esto sera fuente de errores, de modo que siempre usaremos la misma
clave candidata para identificar la entidad.

La Clave principal: (o primaria), es una clave candidata elegida de forma arbitraria,


que usaremos siempre para identificar una entidad.

Claves de interrelaciones
Para identificar interrelaciones el proceso es similar, aunque ms simple.
Tengamos en cuenta que para definir una interrelacin usaremos las claves
primarias de las entidades interrelacionadas. De este modo, el identificador de una
interrelacin es el conjunto de las claves primarias de cada una de las entidades
interrelacionadas.

Por ejemplo, si tenemos dos personas identificadas con dos valores de su clave
primaria, clave1 y clave2, y queremos establecer una interrelacin "es padre de"
entre ellas, usaremos esas dos claves. El identificador de la interrelacin ser
clave1,clave2.

Entidades fuertes y dbiles


A menudo la clave de una entidad est ligada a la clave principal de otra, an sin
tratarse de una interrelacin. Por ejemplo, supongamos una entidad viaje, que usa
la clave de un vehculo y aade otros atributos como origen, destino, fecha,
distancia. Decimos que la entidad viaje es una entidad dbil, en contraposicin a la
entidad vehculo, que es una entidad fuerte. La diferencia es que las entidades
dbiles no necesitan una clave primaria, sus claves siempre estn formadas como
la combinacin de una clave primaria de una entidad fuerte y otros atributos.

Adems, la existencia de las entidades dbiles est ligada o subordinada a la de la


fuerte. Es decir, existe una dependencia de existencia. Si eliminamos un vehculo,
deberemos eliminar tambin todos los viajes que ese vehculo ha realizado.

Dependencia de existencia
Se dice que existe una dependencia de existencia entre una entidad, subordinada,
y otra, dominante, cuando la eliminacin de la entidad dominante, conlleva tambin
la eliminacin de la entidad o entidades subordinadas.

26

www.fullengineeringbook.net
MySQL
Manual del Participante

Desde cierto punto de vista, podemos considerar que las entidades dominantes y
sus entidades subordinadas forman parte de una misma entidad. Es decir, una
entidad est formada por ella misma y sus circunstancias. Esas circunstancias
podran ser, en el caso de nuestro vehculo, adems de los viajes que ha hecho,
los dueos que ha tenido, las revisiones que se le han efectuado, averas, etc. Es
decir, todo su historial.

Generalizacin
Es el proceso segn el cual se crea un conjunto de entidades a partir de otros que
comparten ciertos atributos.

A veces existen situaciones en que sea conveniente crear una entidad como una
fusin de otras, en principio, diferentes, aunque con atributos comunes. Esto
disminuye el nmero de conjuntos de entidades y facilita el establecimiento de
interrelaciones.

Por ejemplo, si estamos modelando la gestin de una biblioteca, en la que adems


de libros se pueden consultar y prestar revistas y pelculas. Desde el punto de vista
del modelo E-R, deberamos crear conjuntos de entidades distintos para estos tres
tipos de entidad, sin embargo, todos ellos tienen comportamientos y caractersticas
comunes: prstamos, ubicaciones, ejemplares, editorial. Tambin tienen atributos
especficos, como el nmero de revista, o la duracin de la pelcula.

La idea es crear una entidad con una nica copia de los atributos comunes y aadir
los atributos no comunes. Adems se debe aadir un atributo que indique que tipo
de entidad estamos usando, este atributo es un discriminador.

La desventaja de la generalizacin es que se desperdicia espacio de


almacenamiento, ya que slo algunos de los atributos no comunes contienen
informacin en cada entidad, el resto se desperdicia.

La ventaja es que podemos establecer el mismo tipo de interrelacin con cualquier


entidad del conjunto. En nuestro ejemplo, en lugar de tener que establecer tres
interrelaciones de prstamo, o ubicacin, bastar con una de cada tipo.

Especializacin
Es el proceso inverso al de generalizacin, en lugar de crear una entidad a partir de
varias, descomponemos una entidad en varias ms especializadas.

Programa Nacional de Informtica 27

www.fullengineeringbook.net
MySQL
Manual del Participante

Es el proceso segn el cual se crean varios tipos de entidades a partir de uno.


Cada una de los conjuntos de entidades resultantes contendr slo algunos de los
atributos del conjunto original.

La idea es lgica: si la generalizacin tiene ventajas e inconvenientes, cuando los


inconvenientes superan a las ventajas, ser conveniente hacer una especializacin.

Por ejemplo, para gestionar la flota de vehculos de una empresa usamos un nico
conjunto de entidades, de modo que tratamos del mismo modo motocicletas,
utilitarios, limusinas, furgonetas y camiones. Pero, desde el punto de vista de
mantenimiento, se pueden considerar entidades diferentes: cada una de ellas tiene
revisiones distintas y en talleres diferentes. Es decir, las diferencias superan a los
atributos comunes. Este conjunto de entidades es un buen candidato a la
especializacin.

En realidad, es irrelevante si una entidad en fruto de una generalizacin o de una


especializacin, no deja de ser una entidad, y por lo tanto, no afecta al modelo.

Representacin de entidades y relaciones


La representacin de entidades y relacioneslos haremos usando los diagramas E-
R, pus son los mas utilizados.

Entidad
Las entidades se representan con un rectngulo, y en su interior el nombre
de la entidad. Ver la siguiente figura.

Las entidades dbiles pueden representarse mediante dos rectngulos


inscritos. Ya sabemos que existe una dependencia de existencia entre la
entidad dbil y la fuerte, esto se representa tambin aadiendo una flecha a
la lnea que llega a la entidad dbil.

28

www.fullengineeringbook.net
MySQL
Manual del Participante

Atributo
Los atributos se representan mediante elipses, y en su interior el nombre del
atributo:

Algunas variantes de diagramas E-R usan algunas marcas para indicar que
cierto atributo es una clave primaria, como subrayar el nombre del atributo.

Tambin es frecuente usar una doble elipse para indicar atributos


multivaluados:

Atributo multivaluado (o multivalorado) se dice del atributo tal que para una
misma entidad puede tomar varios valores diferentes, es decir, varios
valores del mismo dominio.

Interrelacin
Las interrelaciones se representan mediante rombos, y en su interior el
nombre de la interrelacin:

En los extremos de las lneas que parten del rombo se aaden unos
nmeros que indican la cantidad de entidades que intervienten en la
interrelacin: 1, n. Esto tambin se suele hacer modificando el extremo de
las lneas. Si terminan con un extremo involucran a una entidad, si terminan
en varios extremos, (generalmente tres), involucrarn a varias entidades:

Programa Nacional de Informtica 29

www.fullengineeringbook.net
MySQL
Manual del Participante

Sobre las lneas a veces se aade el rol que representa cada entidad:

Dominio
A veces es conveniente aadir informacin sobre el dominio de un atributo,
los dominios se representan mediante hexgonos, con la descripcin del
dominio en su interior:

Diagrama
Un diagrama E-R consiste en representar mediante estas figuras un modelo
completo del problema, proceso o realidad a describir, de forma que se
definan tanto las entidades que lo componen, como las interrelaciones que
existen entre ellas.

30

www.fullengineeringbook.net
MySQL
Manual del Participante

La idea es simple, aparentemente, pero a la hora de construir modelos sobre


realidades concretas es cuando surgen los problemas. La realidad es
siempre compleja. Las entidades tienen muchos atributos diferentes, de los
cuales debemos aprender a elegir slo los que necesitemos. Lo mismo cabe
decir de las interrelaciones. Adems, no siempre est perfectamente claro
qu es un atributo y qu una entidad; o que ventajas obtenemos si tratamos
a ciertos atributos como entidades y viceversa.

Modelo Relacional
El presente curso no tiene como tema principal el ensear a modelar ni realizar las
tranformaciones del modelo E-R al relacional ya que eso se toca en un curso diferente y
requiere de mayores explicaciones. Sin embargo vamos a explicar los conceptos
relacionados al modelo relacional por que MySQL est orientado principalmente a bases
de datos relacionales.

El doctor Edgar F. Codd, un investigador de IBM, invent en 1970 el modelo relacional,


tambin desarroll el sistema de normalizacin.

El modelo se compone de tres partes


1. Estructura de datos: bsicamente se compone de relaciones.
2. Manipulacin de datos: un conjunto de operadores para recuperar, derivar o
modificar los datos almacenados.
3. Integridad de datos: una coleccin de reglas que definen la consistencia de la
base de datos.

Al Igual que hicimos con el modelo E-R, veremos algunos conceptos bsicos del modelo
relacional. Algunos de los conceptos son comunes entre los dos modelos, como atributo
o dominio. Pero de todos modos, los definiremos nuevamente.

Relacin
Es el concepto bsico del modelo relacional. Los conceptos de relacin entre el
modelo E-R y el relacional son diferentes. Por lo tanto, usamos el trmino
interrelacin para referirnos a la conexin entre entidades. En el modelo relacional
este trmino se refiere a una tabla, y es el paralelo al concepto conjunto de
entidades del modelo E-R.

La relacin es un conjunto de datos referentes a un conjunto de entidades y


organizados en forma tabular, que se compone de filas y columnas, (tuplas y

Programa Nacional de Informtica 31

www.fullengineeringbook.net
MySQL
Manual del Participante

atributos), en la que cada interseccin de fila y columna contiene un valor.

Tupla
A menudo se le llama tambin registro o fila, fsicamente es cada una de las lneas
de la relacin. Equivale al concepto de entidad del modelo E-R, y define un objeto
real, ya sea abstracto, concretos o imaginario.

La Tupla es cada una de las filas de una relacin. Contiene la informacin relativa a
una nica entidad.

De esta definicin se deduce que no pueden existir dos tuplas iguales en la misma
relacin.

Atributo
Tambin denominado campo o columna, corresponde con las divisiones verticales
de la relacin. Corresponde al concepto de atributo del modelo ER y contiene cada
una de las caractersticas que definen una entidad u objeto.

Un Atributo es cada una de las caractersticas que posee una entidad, y que
agrupadas permiten distingirla de otras entidades del mismo conjunto.

Al igual que en el modelo E-R, cada atributo tiene asignado un nombre y un


dominio. El conjunto de todos los atributos es lo que define a una entidad completa,
y es lo que compone una tupla.

Nulo (NULL)
Hay ciertos atributos, para determinadas entidades, que carecen de valor. El
modelo relacional distingue entre valores vacos y valores nulos. Un valor vaco se
considera un valor tanto como cualquiera no vaco, sin embargo, un nulo NULL
indica la ausencia de valor.

Un Nulo (NULL) es un valor asignado a un atributo que indica que no contiene


ninguno de los valores del dominio de dicho atributo.

El nulo es muy importante en el modelo relacional, ya que nos permite trabajar con
datos desconocidos o ausentes.

32

www.fullengineeringbook.net
MySQL
Manual del Participante

Por ejemplo, si tenemos una relacin de vehculos en la que podemos guardar


tanto motocicletas como automviles, un atributo que indique a qu lado est el
volante (para distinguir vehculos con el volante a la izquierda de los que lo tienen a
la derecha), carece de sentido en motocicletas. En ese caso, ese atributo para
entidades de tipo motocicleta ser NULL.

Esto es muy interesante, ya que el dominio de este atributo es (derecha,izquierda),


de modo que si queremos asignar un valor del dominio no hay otra opcin. El valor
nulo nos dice que ese atributo no tiene ninguno de los valores posibles del dominio.
As que, en cierto modo amplia la informacin.

Otro ejemplo, en una relacin de personas tenemos un atributo para la fecha de


nacimiento. Todas las personas de la relacin han nacido, pero en un determinado
momento puede ser necesario insertar una para la que desconocemos ese dato.
Cualquier valor del dominio ser, en principio, incorrecto. Pero tampoco ser
posible distinguirlo de los valores correctos, ya que ser una fecha. Podemos usar
el valor NULL para indicar que la fecha de nacimiento es desconocida.

Dominio
Un Dominio es el rango o conjunto de posibles valores de un atributo.

El concepto de dominio es el mismo en el modelo E-R y en el modelo relacional.


Pero en este modelo tiene mayor importancia, ya que ser un dato importante a la
hora de dimensionar la relacin.

De nuevo estamos ante un concepto muy flexible. Por ejemplo, si definimos un


atributo del tipo entero, el dominio ms amplio sera, lgicamente, el de los
nmeros enteros. Pero este dominio es infinito, y sabemos que los ordenadores no
pueden manejar infinitos nmeros enteros. Al definir un atributo de una relacin
dispondremos de distintas opciones para guardar datos enteros. Si en nuestro caso
usamos la variante de "entero pequeo", el dominio estar entre -128 y 127. Pero
adems, el atributo corresponder a una caracterstica concreta de una entidad; si
se tratase, por ejemplo, de una calificacin sobre 100, el dominio estara restringido
a los valores entre 0 y 100.

Modelo relacional
Ahora ya disponemos de los conceptos bsicos para definir en qu consiste el
modelo relacional. Es un modelo basado en relaciones, en la que cada una de ellas

Programa Nacional de Informtica 33

www.fullengineeringbook.net
MySQL
Manual del Participante

cumple determinadas condiciones mnimas de diseo:

No deben existir dos tuplas iguales.


Cada atributo slo puede tomar un nico valor del dominio, es decir, no
puden contener listas de valores.
El orden de las tuplas dentro de la relacin y el de los atributos, dentro de
cada tupla, no es importante.

Cardinalidad
La Cardinalidad es el nmero de tuplas que contiene una relacin.

La cadinalidad puede cambiar, y de hecho lo hace frecuentemente, a lo largo del


tiempo siempre se pueden aadir y eliminar tuplas.

Grado
El Grado es el nmero de atributos de cada tupla.

El grado de una relacin es un valor constante. Esto no quiere decir que no se


puedan agregar o eliminar atributos de una relacin; lo que significa es que si se
hace, la relacin cambia. Cambiar el grado, generalmente, implicar modificaciones
en las aplicaciones que hagan uso de la base de datos, ya que cambiarn
conceptos como claves e interrelaciones, de hecho, puede cambiar toda la
estructura de la base de datos.

Esquema
El Esquema es la parte constante de una relacin, es decir, su estructura.

Esto es, el esquema es una lista de los atributos que definen una relacin y sus
dominios.

Instancia
La Instancia es el conjunto de las tuplas que contiene una relacin en un momento
determinado.

Es como una fotografa de la relacin, que slo es vlida durante un periodo de


tiempo concreto.

34

www.fullengineeringbook.net
MySQL
Manual del Participante

Clave
La Clave es un conjunto de atributos que identifica de forma unvoca a una tupla.
Puede estar compuesto por un nico atributo o una combinacin de varios.

Dentro del modelo relacional no existe el concepto de clave mltiple. Cada clave
slo puede hacer referencia a una tupla de una tabla. Por lo tanto, todas las claves
de una relacin son nicas.

Podemos clasificar las claves en distintos tipos:

Candidata: cada una de las posibles claves de una relacin, en toda


relacin existir al menos una clave candidata. Esto implica que ninguna
relacin puede contener tuplas repetidas.

Primaria: (o principal) es la clave candidata elegida por por el usuario para


identificar las tuplas. No existe la necesidad, desde el punto de vista de la
teora de bases de datos relacionales, de elegir una clave primaria. Adems,
las claves primarias no pueden tomar valores nulos.

Es preferible, por motivos de optimizacin de MySQL, que estos valores


sean enteros, aunque no es obligatorio. MySQL slo admite una clave
primaria por tabla, lo cual es lgico, ya que la definicin implica que slo
puede existir una.

Alternativa: cada una de las claves candidatas que no son clave primaria, si
es que existen.

Fornea: (o externa) es el atributo (o conjunto de atributos) dentro de una


relacin que contienen claves primarias de otra relacin. No hay nada que
impida que ambas relaciones sean la misma.

Interrelacin
Decimos que dos relaciones estn interrelacionadas cuando una posee una clave
fornea de la otra. Cada una de las claves forneas de una relacin establece una
interrelacin con la relacin donde esa clave es la principal.

Segn esto, existen dos tipos de interrelacin:


La interrelacin entre entidades fuertes y dbiles.
Programa Nacional de Informtica 35

www.fullengineeringbook.net
MySQL
Manual del Participante

La interreacin pura, entre entidades fuertes.

Al igual que en el modelo E-R, existen varios tipos de interrelacin:

Uno a uno: a cada tupla de una relacin le corresponde una y slo una tupla
de otra.
Uno a varios: a cada tupla una relacin le corresponden varias en otra.
Varios a varios: cuando varias tuplas de una relacin se pueden
corresponder con varias tuplas en otra.

Ejemplo de un modelo Relacional

36

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. A que se le denomina dato?


2. Qu es una base de datos?
3. Qu es un sistema de gestin de base de datos? Cite un ejemplo.
4. Cundo se dice que hay redundancia de datos?
5. Cundo se produce una inconsistencia de datos?
6. Cundo se dice que la base de datos no tiene integridad?
7. Qu es el modelo Entidad-Relacion?
8. Cite 5 ejemplos de entidad
9. Cite 5 ejemplos de atributos para una factura.
10. Se puede decir que el atributo Estado Civil de una persona es un dominio?Por
que?
11. Qu es una interrelacin?
12. A que se le denomina grado de una interrelacin?
13. Qu es una clave?
14. En la tabla de Personas de la SUNAT, que tipo de clave seria el RUC y el DNI de
un contribuyente?
15. Cite dos ejemplos de entidades Fuertes y su correspondiente entidad dbil.
16. Qu entiende por Generalizacin?
17. Que se representa con en el siguiente grfico

18. Que tipo de interrelacion existe en el siguiente grfico

19. Es lo mismo decir modelo E-R que modelo relacional?


20. En el modelo relacional. Se podria decir que una tabla es una relacin?
21. Qu es una Instancia?
22. Cite 3 ejemplos en donde existan relaciones varios a varios.

Programa Nacional de Informtica 37

www.fullengineeringbook.net
www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 3
Tipos de datos

Objetivos
Al finalizar este capitulo, el participante aprender a reconocer y usar :
 Datos del tipo cadena o string
 Datos enteros
 Datos de coma flotante
 Datos de Fecha/Hora
 Datos para grandes bloques de texto.
 Datos enumerados y conjuntos.

En MySQL existen diferentes tipos de datos, que para estudiarlos seria mejor agruparlos
por categoras: de caracteres, enteros, de coma flotante, tiempos, bloques, enumerados y
conjuntos.

Tipos de datos de cadenas de caracteres

CHAR
Es un sinnimo de CHAR(1), y puede contener un nico carcter

CHAR()
[NATIONAL] CHAR(M) [BINARY | ASCII | UNICODE]
Contiene una cadena de longitud constante. Para mantener la longitud de la
cadena, se rellena a la derecha con espacios. Estos espacios se eliminan al
recuperar el valor.

Los valores vlidos para M son de 0 a 255, y de 1 a 255 para versiones de MySQL
previas a 3.23.

Si no se especifica la palabra clave BINARY estos valores se ordenan y comparan


sin distinguir maysculas y minsculas.

CHAR es un alias para CHARACTER.


Programa Nacional de Informtica 39

www.fullengineeringbook.net
MySQL
Manual del Participante

VARCHAR()
[NATIONAL] VARCHAR(M) [BINARY]

Contiene una cadena de longitud variable. Los valores vlidos para M son de 0 a
255, y de 1 a 255 en versiones de MySQL anteriores a 4.0.2.

Los espacios al final se eliminan.

Si no se especifica la palabra clave BINARY estos valores se ordenan y comparan


sin distinguir maysculas y minsculas.

VARCHAR es un alias para CHARACTER VARYING.

Tipos de datos enteros

TINYINT
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un valor entero muy pequeo. El rango con signo es entre -128 y 127. El
rango sin singo, de 0 a 255.

BIT, BOOL, BOOLEAN


SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero corto. El rango con signo es de -32768 a 32767. El rango sin
singo, de 0 a 65535.

MEDIUMINT
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero de tamao medio, el rango con signo est entre -8388608 y
8388607. El rango sin signo, entre 0 y 16777215.

INT
INT[(M)] [UNSIGNED] [ZEROFILL]

40

www.fullengineeringbook.net
MySQL
Manual del Participante

Contiene un entero de tamao normal. El rango con signo est entre -2147483648
y 2147483647. El rango sin singo, entre 0 y 4294967295.

INTEGER
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
Es sinnimo de INT.

BIGINT
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
Contiene un entero grande. El rango con signo es de -9223372036854775808 a
9223372036854775807. El rango sin signo, de 0 a 18446744073709551615.

Tipos de datos en coma flotante

FLOAT
FLOAT(precision) [UNSIGNED] [ZEROFILL]
Contiene un nmero en coma flotante. precision puede ser menor o igual que 24
para nmeros de precisin sencilla y entre 25 y 53 para nmeros en coma flotante
de doble precisin. Estos tipos son idnticos que los tipos FLOAT y DOUBLE
descritos a continuacin. FLOAT(X) tiene el mismo rango que los tipos FLOAT y
DOUBLE correspondientes, pero el tamao mostrado y el nmero de decimales
quedan indefinidos.

FLOAT()
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
Contiene un nmero en coma flotante pequeo (de precisin sencilla). Los valores
permitidos son entre -3.402823466E+38 y -1.175494351E-38, 0, y entre
1.175494351E-38 y 3.402823466E+38. Si se especifica el modificador UNSIGNED,
los valores negativos no se permiten.

El valor M es la anchura a mostrar y D es el nmero de decimales. Si se usa sin


argumentos o si se usa FLOAT(X), donde X sea menor o igual que 24, se sigue
definiendo un valor en coma flotante de precisin sencilla.

Programa Nacional de Informtica 41

www.fullengineeringbook.net
MySQL
Manual del Participante

DOUBLE
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

Contiene un nmero en coma flotante de tamao normal (precisin doble). Los


valores permitidos estn entre -1.7976931348623157E+308 y -
2.2250738585072014E-308, 0, y entre 2.2250738585072014E-308 y
1.7976931348623157E+308. Si se especifica el modificador UNSIGNED, no se
permiten los valores negativos.

El valor M es la anchura a mostrar y D es el nmero de decimales. Si se usa sin


argumentos o si se usa FLOAT(X), donde X est entre 25 y 53, se sigue definiendo
un valor en coma flotante de doble precisin.

DOUBLE PRECISION, REAL


DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL]
REAL[(M,D)] [UNSIGNED] [ZEROFILL]

Ambos son sinnimos de DOUBLE

DECIMAL
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

Contiene un nmero en coma flotante sin empaquetar. Se comporta igual que una
columna CHAR: "sin empaquetar" significa que se almacena como una cadena,
usando un carcter para cada dgito del valor. El punto decimal y el signo '-' para
valores negativos, no se cuentan en M (pero el espacio para estos se reserva). Si D
es 0, los valores no tendrn punto decimal ni decimales.

El rango de los valores DECIMAL es el mismo que para DOUBLE, pero el rango
actual para una columna DECIMAL dada est restringido por la eleccin de los
valores M y D.

Si se especifica el modificador UNSIGNED, los valores negativos no estn


permitidos.

Si se omite D, el valor por defecto es 0. Si se omite M, el valor por defecto es 10.


42

www.fullengineeringbook.net
MySQL
Manual del Participante

DEC, NUMERIC, FIXED


DEC[(M[,D])] [UNSIGNED] [ZEROFILL]
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]
FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

Todos ellos son sinnimos de DECIMAL.

Tipos de datos de fecha y hora

DATE
Contiene una fecha. El rango soportado est entre '1000-01-01' y '9999-12-31'.
MySQL muestra los valores DATE con el formato 'AAAA-MM-DD', pero es posible
asignar valores a columnas de este tipo usando tanto nmeros como cadenas.

DATETIME
Contiene una combinacin de fecha y hora. El rango soportado est entre '1000-
01-01 00:00:00' y '9999-12-31 23:59:59'. MySQL muestra los valores DATETIME
con el formato 'AAAA-MM-DD HH:MM:SS', pero es posible asignar valores a
columnas de este tipo usando tanto cadenas como nmeros.

TIMESTAMP
TIMESTAMP[(M)]

Contiene un valor del tipo timestamp. El rango est entre '1970-01-01 00:00:00' y
algn momento del ao 2037.

Hasta MySQL 4.0 los valores TIMESTAMP se mostraban como


AAAAMMDDHHMMSS, AAMMDDHHMMSS, AAAAMMDD o AAMMDD,
dependiendo del si el valor de M es 14 (o se omite), 12, 8 o 6, pero est permitido
asignar valores a columnas TIMESTAMP usando tanto cadenas como nmeros.

Desde MySQL 4.1, TIMESTAMP se devuelve como una cadena con el formato
'AAAA-MM-DD HH:MM:SS'. Para convertir este valor a un nmero, bastar con
sumar el valor 0. Ya no se soportan distintas longitudes para estas columnas.

Programa Nacional de Informtica 43

www.fullengineeringbook.net
MySQL
Manual del Participante

Se puede asignar fcilmente la fecha y hora actual a uno de estas columnas


asignando el valor NULL.

El argumento M afecta slo al modo en que se visualiza la columna TIMESTAMP.


Los valores siempre se almacenan usando cuatro bytes. Adems, los valores de
columnas TIMESTAMP(M), cuando M es 8 14 se devuelven como nmeros,
mientras que para el resto de valores se devuelven como cadenas.

TIME
Una hora. El rango est entre '-838:59:59' y '838:59:59'. MySQL muestra los
valores TIME en el formato 'HH:MM:SS', pero permite asignar valores a columnas
TIME usando tanto cadenas como nmeros.

YEAR
YEAR[(2|4)]

Contiene un ao en formato de 2 4 dgitos (por defecto es 4). Los valores vlidos


son entre 1901 y 2155, y 0000 en el formato de 4 dgitos. Y entre 1970-2069 si se
usa el formato de 3 dgitos (70-69).

MySQL muestra los valores YEAR usando el formato AAAA, pero permite asignar
valores a una columna YEAR usando tanto cadenas como nmeros.

Tipos de datos para datos sin tipo o grandes bloques de datos

TINYBLOB, TINYTEXT
Contiene una columna BLOB o TEXT con una longitud mxima de 255 caracteres
(28 - 1).

BLOB, TEXT
Contiene una columna BLOB o TEXT con una longitud mxima de 65535
caracteres (216 - 1).

44

www.fullengineeringbook.net
MySQL
Manual del Participante

MEDIUMBLOB, MEDIUMTEXT
Contiene una columna BLOB o TEXT con una longitud mxima de 16777215
caracteres (224 - 1).

LONGBLOB, LONGTEXT
Contiene una columna BLOB o TEXT con una longitud mxima de 4294967298
caracteres (232 - 1).

Tipos enumerados y conjuntos

ENUM
ENUM('valor1','valor2',...)

Contiene un enumerado. Un objeto de tipo cadena que puede tener un nico valor,
entre una lista de valores 'valor1', 'valor2', ..., NULL o el valor especial de error "".
Un ENUM puede tener un mximo de 65535 valores diferentes.

SET
Contiene un conjunto. Un objeto de tipo cadena que puede tener cero o ms
valores, cada uno de los cuales debe estar entre una lista de valores 'valor1',
'valor2', ...

Un conjunto puede tener un mximo de 64 miembros.

Programa Nacional de Informtica 45

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Qu tipo de atributo usaria para almacenar el (los) Apellido(s) de un alumno?


2. Cul es la diferencia entre CHAR(n) y VARCHAR(n)?
3. Es correcto usar el tipo entero INT para almacenar el nmero de hijos que posee
una persona?Por que?
4. Qu tipo de datos usaria usted para almacenar la edad de una persona?
5. Cite 5 ejemplo en los cuales usaria el tipo de dato DECIMAL
6. Cul es la diferencia entre DATETIME y TIMESTAMP?
7. Deseamo almacenar el currculo vitae de una persona. Qu tipo de datos
sugiere?
8. Se quiere almacenar los colores : Rojo, Amarillo, Verde y Azul Con que tipo de
datos lo haria usted?
9. Qu tipo de datos se necesita para almacenar el sexo de una persona?
10. Defina los atributos de la siguiente tabla.

46

www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 4
El cliente MySQL

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Usar la consola o Smbolo del Sistema para trabajar con MySQL
 Conectarse y desconectarse del Servidor MySQL
 Hacer consultas a la base de datos.
 Reconocer cuales son las instrucciones DDL y DML.
 Crear y usar base de datos.
 Crear, usar y eliminar tablas.

El Cliente MySQL
Existen muchas formas de establecer una comunicacin con el servidor de MySQL. En
nuestros programas, generalmente, usaremos un API para realizar las consultas con el
servidor. En PHP, por ejemplo, este API est integrado con el lenguaje, en C/C++ se trata
de libreras de enlace dinmico, etc.

En este curso usaremos MySQL de forma directa, mediante un cliente ejecutndose en


una consola (una ventana DOS en Windows, o un Shell en otros sistemas).

Veamos un ejemplo sencillo. Para ello abrimos una consola y tecleamos "mysql". (Si
estamos en Windows y no est definido el camino para MySQL tendremos que hacerlo
desde "C:\mysql\bin").

Para entrar en la consola de MySQL se requieren ciertos parmetros. Hay que tener en
cuenta que el servidor es multiusuario, y que cada usuario puede tener distintos
privilegios, tanto de acceso a tablas como de comandos que puede utilizar.

La forma general de iniciar una sesin MySQL es:

mysql -h host -u usuario -p

Programa Nacional de Informtica 47

www.fullengineeringbook.net
MySQL
Manual del Participante

A travs de la ventana de comandos de Windows y con los parmetros anteriores


podemos iniciar la sesion en MySQL, tal y como se muestra en la siguiente figura.

En la figura anterior, podemos especificar el computador donde est el servidor de bases


de datos (host) y nuestro nombre de usuario. Los parmetros "-h" y "-u" indican que los
parmetros a continuacin son, respectivamente, el nombre del host y el usuario. El
parmetro "-p" indica que se debe solicitar una clave de acceso.

En versiones de MySQL anteriores a la 4.1.9 es posible abrir un cliente de forma annima


sin especificar una contrasea. Pero esto es mala idea, y de hecho, las ltimas versiones
de MySQL no lo permiten. Durante la instalacin de MySQL se nos pedir que elijamos
una clave de acceso para el usuario 'root', deberemos usar esa clave para iniciar una
sesin con el cliente MySQL. En la siguiente figura se aprecia el ingreso de la clave y el
mensaje de bienvenida de MySQL en caso de ingresar con una clave correcta.

48

www.fullengineeringbook.net
MySQL
Manual del Participante

Para salir de una sesin del cliente de MySQL se usa el comando "QUIT".

Consultar la base de datos


Ahora ya sabemos entrar y salir del cliente MySQL, y podemos hacer consultas. Lo
ms sencillo es consultar algunas variables del sistema o el valor de algunas
funciones de MySQL. Para hacer este tipo de consultas se usa la sentencia
SELECT. Veamos el siguiente ejemplo ilustrado en la figura siguiente.

SELECT es la sentencia SQL para seleccionar datos de bases de datos, pero


tambin se puede usar, como en este caso, para consultar variables del sistema o
resultados de funciones. En este caso hemos consultado el resultado de la funcin
VERSION y de la variable CURRENT_DATE.

Usuarios y privilegios
Cuando trabajemos con bases de datos reales y con aplicaciones de gestin de
bases de datos, ser muy importante definir otros usuarios, adems del root, que
es el administrador. Esto nos permitir asignar distintos privilegios a cada usuario, y
nos ayudar a proteger las bases de datos.

Podremos por ejemplo, crear un usuario que slo tenga posibilidad de consultar
datos de determinadas tablas o bases de datos, pero que no tenga permiso para
aadir o modificar datos, o modificar la estructura de la base de datos.
Programa Nacional de Informtica 49

www.fullengineeringbook.net
MySQL
Manual del Participante

Otros usuarios podrn insertar datos, y slo algunos (o mejor, slo uno) podrn
modificar la estructura de las bases de datos: los administradores.

Creacin de bases de datos y tablas

A nivel terico, existen dos lenguajes para el manejo de bases de datos:

DDL (Data Definition Language) Lenguaje de definicin de datos. Es el lenguaje


que se usa para crear bases de datos y tablas, y para modificar sus estructuras, as
como los permisos y privilegios. Este lenguaje trabaja sobre unas tablas especiales
llamadas diccionario de datos.

DML (Data Manipilation Language) lenguaje de manipulacin de datos. Es el que


se usa para modificar y obtener datos desde las bases de datos.

SQL engloba ambos lenguajes DDL+DML, y los estudiaremos juntos, ya que ambos
forman parte del conjunto de sentencias de SQL.

Crear base de datos


Cada conjunto de relaciones que componen un modelo completo forma una base
de datos. Desde el punto de vista de SQL, una base de datos es slo un conjunto
de relaciones (o tablas), y para organizarlas o distinguirlas se accede a ellas
mediante su nombre. A nivel de sistema operativo, cada base de datos se guarda
en un directorio diferente.

Debido a esto, crear una base de datos es una tarea muy simple. Claro que, en el
momento de crearla, la base de datos estar vaca, es decir, no contendr ninguna
tabla.

Vamos a crear y manipular nuestra propia base de datos, al tiempo que nos
familiarizamos con la forma de trabajar de MySQL.

Para empezar, crearemos una base de datos para nosotros solos, y la llamaremos
"Gestion". Para crear una base de datos se usa una sentencia CREATE
DATABASE. Ver la figura siguiente.

50

www.fullengineeringbook.net
MySQL
Manual del Participante

Podemos averiguar cuntas bases de datos existen en nuestro sistema usando la


sentencia SHOW DATABASES, como se muestra en la siguiente figura.

A partir de ahoratrabajaremos con la base de datos Gestion, por lo tanto la


seleccionaremos como base de datos por defecto. Esto nos permitir obviar el
nombre de la base de datos en consultas. Para seleccionar una base de datos se
usa el comando USE, que no es exactamente una sentencia SQL, sino ms bien
de una opcin de MySQL. Ver la figura siguiente.

Creacin de Tablas
La sentencia CREATE TABLE permite crear tablas. La sintaxis de esta sentencia
es muy compleja, ya que existen muchas opciones y tenemos muchas
posibilidades diferentes a la hora de crear una tabla.

En su forma ms simple, la sentencia CREATE TABLE crear una tabla con las
columnas que indiquemos. Crearemos, como ejemplo, una tabla que nos permitir
almacenar nombres de personas y sus fechas de nacimiento. Deberemos indicar el

Programa Nacional de Informtica 51

www.fullengineeringbook.net
MySQL
Manual del Participante

nombre de la tabla y los nombres y tipos de las columnas. Veamos a continuacin


la siguiente figura.

Acabamos de crear una tabla llamada "Persona" con dos columnas: "nombre" que
puede contener cadenas de hasta 25 caracteres y "fecha" de tipo fecha.

Podemos consultar cuntas tablas y qu nombres tienen en una base de datos,


usando la sentencia SHOW TABLES. Veamos esta sentencia en la siguiente figura.

Pero tenemos muchas ms opciones a la hora de definir columnas. Adems del


tipo y el nombre, podemos definir valores por defecto, permitir o no que contengan
valores nulos, crear una clave primaria, indexar, etc.

La sintaxis para definir columnas es la siguiente

nombre_col tipo [NOT NULL | NULL] [DEFAULT valor_por_defecto]


[AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT 'string']
[definicin_referencia]

Veamos cada una de las opciones por separado.

52

www.fullengineeringbook.net
MySQL
Manual del Participante

Valores nulos
Al definir cada columna podemos decidir si podr o no contener valores
nulos.

Debemos recordar que aquellas columnas que son o forman parte de una
clave primaria no pueden contener valores nulos.

Veremos que, si definimos una columna como clave primaria,


automticamente se impide que pueda contener valores nulos, pero este no
es el nico caso en que puede ser interesante impedir la asignacin de
valores nulos para una columna.

La opcin por defecto es que se permitan valores nulos, NULL, y para que
no se permitan, se usa NOT NULL. Veamos el siguiene ejemplo.

Valores por defecto


Para cada columna tambin se puede definir, opcionalmente, un valor por
defecto. El valor por defecto se asignar de forma automtica a una columna
cuando no se especifique un valor determinado al aadir filas.

Si una columna puede tener un valor nulo, y no se especifica un valor por


defecto, se usar NULL como valor por defecto. En el ejemplo anterior, el
valor por defecto para la columna Nrohoras es NULL.

Por ejemplo, si queremos que el valor por defecto para NroHoras sea 30,
podemos crear la tabla de la siguiente manera.

Programa Nacional de Informtica 53

www.fullengineeringbook.net
MySQL
Manual del Participante

Claves primarias
Tambin se puede definir una clave primaria sobre una columna, usando la
palabra clave KEY o PRIMARY KEY.

Slo puede existir una clave primaria en cada tabla, y la columna sobre la
que se define una clave primaria no puede tener valores NULL. Si esto no se
especifica de forma explcita, MySQL lo har de forma automtica.

Por ejemplo, si queremos crear un ndice en la columna nombre de la tabla


Cursos crearemos la tabla de la siguiente manera.

Usar NOT NULL PRIMARY KEY equivale a PRIMARY KEY, NOT NULL KEY
o sencillamente KEY. Personalmente, prefiero usar la primera forma o la
segunda.

Existe una sintaxis alternativa para crear claves primarias, que en general es
preferible, ya que es ms potente. De hecho, la que hemos explicado es un
alias para la forma general, que no admite todas las funciones (como por
ejemplo, crear claves primarias sobre varias columnas).

Columnas autoincrementadas
En MySQL tenemos la posibilidad de crear una columna autoincrementada,
aunque esta columna slo puede ser de tipo entero.

Si al insertar una fila se omite el valor de la columna autoinrementada o si se


inserta un valor nulo para esa columna, su valor se calcula automticamente,
tomando el valor ms alto de esa columna y sumndole una unidad. Esto
permite crear, de una forma sencilla, una columna con un valor nico para
cada fila de la tabla.

Generalmente, estas columnas se usan como claves primarias 'artificiales'.


MySQL est optimizado para usar valores enteros como claves primarias, de

54

www.fullengineeringbook.net
MySQL
Manual del Participante

modo que la combinacin de clave primaria, que sea entera y


autoincrementada es ideal para usarla como clave primaria artificial. Veamos
el siguiente ejemplo.

Comentarios
Adicionalmente, al crear la tabla, podemos aadir un comentario a cada
columna. Este comentario sirve como informacin adicional sobre alguna
caracterstica especial de la columna, y es parte de la documentacin de la
base de datos. Veamos el siguiente ejemplo.

Indices
Tenemos tres tipos de ndices. El primero corresponde a las claves primarias, que
como vimos, tambin se pueden crear a la hora de definir las columnas.

Claves primarias
La sintaxis para definir claves primarias es la siguiente.

definicin_columnas
| PRIMARY KEY (index_nombre_col,...)

El ejemplo anterior, vimos una forma de crear claves primarias, Ahora


usando esta sintaxis, quedara de la siguiente forma.

Programa Nacional de Informtica 55

www.fullengineeringbook.net
MySQL
Manual del Participante

Pero esta forma tiene ms opciones, por ejemplo, entre los parntesis
podemos especificar varios nombres de columnas, para construir claves
primarias compuestas por varias columnas. Veamos el siguiente ejemplo.

ndices
El segundo tipo de ndice permite definir ndices sobre una columna, sobre
varias, o sobre partes de columnas. Para definir estos ndices se usan
indistintamente las opciones KEY o INDEX. Veamos el ejemplo siguiente.

O su equivalente,

56

www.fullengineeringbook.net
MySQL
Manual del Participante

En MySQL, tambin es posible crear un ndice sobre parte de una columna.


El siguiente ejemplo ilustra como hacerlo.

En el ejemplo anterior usar slo los cuatro primeros caracteres de la


columna 'nombre' para crear el ndice.

Claves nicas
El tercero permite definir ndices con claves nicas, tambin sobre una
columna, sobre varias o sobre partes de columnas. Para definir ndices con
claves nicas se usa la opcin UNIQUE.

La diferencia entre un ndice nico y uno normal es que en los nicos no se


permite la insercin de filas con claves repetidas. La excepcin es el valor
NULL, que s se puede repetir. Veamos el ejemplo siguiente.

Programa Nacional de Informtica 57

www.fullengineeringbook.net
MySQL
Manual del Participante

Una clave primaria equivale a un ndice de clave nica, en la que el valor de


la clave no puede tomar valores NULL. Tanto los ndices normales como los
de claves nicas s pueden tomar valores NULL.

Por lo tanto, las definiciones siguientes son equivalentes.

Los ndices sirven para optimizar las consultas y las bsquedas de datos.
Mediante su uso es mucho ms rpido localizar filas con determinados
valores de columnas, o seguir un determinado orden. La alternativa es hacer
bsquedas secuenciales, que en tablas grandes requieren mucho tiempo.

Claves forneas
En MySQL slo existe soporte para claves forneas en tablas de tipo InnoDB. Sin
embargo, esto no impide usarlas en otros tipos de tablas.

La diferencia consiste en que en esas tablas no se verifica si una clave fornea


existe realmente en la tabla referenciada, y que no se eliminan filas de una tabla
con una definicin de clave fornea. Para hacer esto hay que usar tablas InnoDB.

58

www.fullengineeringbook.net
MySQL
Manual del Participante

Hay dos modos de definir claves forneas en bases de datos MySQL.

El primero, slo sirve para documentar, y, al menos en las pruebas que hemos
echo, no define realmente claves forneas. Esta forma consiste en definir una
referencia al mismo tiempo que se define una columna. Veamos el siguiente
ejemplo.

Hemos usado una definicin de referencia para la columna 'IdPersona' de la tabla


'Telefonos', indicando que es una clave fornea correspondiente a la columna
'IdPersona' de la tabla 'Personas'. Sin embargo, aunque la sintaxis se comprueba,
esta definicin no implica ningn comportamiento por parte de MySQL.

La otra forma es mucho ms til, aunque slo se aplica a tablas InnoDB.

En esta forma no se aade la referencia en la definicin de la columna, sino


despus de la definicin de todas las columnas. Veamos la siguiente sintaxis
resumida.

CREATE TABLE nombre


definicin_de_columnas
[CONSTRAINT [smbolo]] FOREIGN KEY [nombre_index] (nombre_col_index,...)
[REFERENCES nombre_tabla [(nombre_col,...)]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT]
[ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT]]

El ejemplo anterior, usando tablas InnoDB y esta definicin de claves forneas


quedar de la siguiente manera.

Programa Nacional de Informtica 59

www.fullengineeringbook.net
MySQL
Manual del Participante

Es imprescindible que la columna que contiene una definicin de clave fornea est
indexada. Pero esto no debe preocuparnos demasiado, ya que si no lo hacemos de
forma explcita, MySQL lo har por nosotros de forma implcita.

Esta forma define una clave fornea en la columna 'IdPersona' de la tabla


'Telefonos2', que hace referencia a la columna 'IdPersona' de la tabla 'Personas2'.
La definicin incluye las tareas a realizar en el caso de que se elimine una fila en la
tabla 'Personas'.

ON DELETE <opcin>, indica que acciones se deben realizar en la tabla actual si


se borra una fila en la tabla referenciada.

ON UPDATE <opcin>, es anlogo pero para modificaciones de claves.

Existen cinco opciones diferentes.

RESTRICT: esta opcin impide eliminar o modificar filas en la tabla


referenciada si existen filas con el mismo valor de clave fornea.
CASCADE: borrar o modificar una clave en una fila en la tabla referenciada
con un valor determinado de clave, implica borrar las filas con el mismo valor
de clave fornea o modificar los valores de esas claves forneas.
SET NULL: borrar o modificar una clave en una fila en la tabla referenciada
con un valor determinado de clave, implica asignar el valor NULL a las
claves forneas con el mismo valor.
NO ACTION: las claves forneas no se modifican, ni se eliminan filas en la
tabla que las contiene.
60

www.fullengineeringbook.net
MySQL
Manual del Participante

SET DEFAULT: borrar o modificar una clave en una fila en la tabla


referenciada con un valor determinado implica asignar el valor por defecto a
las claves forneas con el mismo valor.

A continuacin veremos un ejemplo de la definicin de la tabla 'Telefonos':

Si se intenta borrar una fila de 'Personas' con un determinado valor de 'IdPersona',


se producir un error si existen filas en la tabla 'Telefonos3' con mismo valor en la
columna 'IdPersona'. La fila de la tabla 'Personas' no se eliminar, a no ser que
previamente eliminemos las filas con el mismo valor de clave fornea en
'Telfonos3'.

Si se modifica el valor de la columna 'IdPersona' en la tabla 'Personas', se


modificarn los valores de la columna 'IdPersona' para mantener la relacin.

Veamos un ejemplo prctico.

Personas
IdPersona Nombre FNacimiento
1 Luis 1962/05/16
2 Pedro 1960/08/13
3 Enrique 1958/10/26

Telefonos3
Numero IdPersona
285093 1
9386651 1
507111 3
9366900 3

Si intentamos borrar la fila correspondiente a "Luis" se producir un error, ya que

Programa Nacional de Informtica 61

www.fullengineeringbook.net
MySQL
Manual del Participante

existen dos filas en la tabla 'Telefonos3' con el valor 1 en la columna 'IdPersona'.

S ser posible borrar la fila correspondiente a "Pedro", ya que no existe ninguna


fila en la tabla 'Telefonos3' con el valor 2 en la columna 'IdPersona'.

Si modificamos el valor de 'IdPersona' en la fila correspondiente a "Enrique", por el


valor 4, por ejemplo, se asignar el valor 4 a la columna 'Id' de las filas 3 y 4 de la
tabla 'Telefonos3', quedando dela siguiente forma.

Personas
IdPersona Nombre FNacimiento
1 Luis 1962/05/16
2 Pedro 1960/08/13
4 Enrique 1958/10/26

Telefonos3
Numero IdPersona
285093 1
9386651 1
507111 4
9366900 4

La parte opcional CONSTRAINT [smbolo] sirve para asignar un nombre a la clave


fornea, de modo que pueda usarse como identificador si se quiere modificar o
eliminar una definicin de clave fornea.

Motor de almacenamiento
La sintaxis de esta opcin es la siguiente.

ENGINE={BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM }

Hay seis motores de almacenamiento disponibles. Algunos de ellos sern de uso


obligatorio si queremos tener ciertas opciones disponibles. Por ejemplo, ya hemos
comentado que el soporte para claves forneas slo est disponible para el motor
InnoDB. Los motores son:

BerkeleyDB o BDB: tablas de transaccin segura con bloqueo de pgina.


HEAP o MEMORY: tablas almacenadas en memoria.
ISAM: motor original de MySQL.
62

www.fullengineeringbook.net
MySQL
Manual del Participante

InnoDB: tablas de transaccin segura con bloqueo de fila y claves forneas.


MERGE o MRG_MyISAM: una coleccin de tablas MyISAM usadas como
una nica tabla.
MyISAM: el nuevo motor binario de almacenamiento portable que reemplaza
a ISAM.

Generalmente se usa tablas MyISAM o tablas InnoDB.

Verificaciones
Disponemos de varias sentencias para verificar o consultar caractersticas de
tablas.

Podemos ver la estructura de una tabla usando la sentencia SHOW COLUMNS.


Veamos un sencillo ejemplo.

Tambin podemos ver la instruccin usada para crear una tabla, mediante la
sentencia SHOW CREATE TABLE. Su uso se ilustra a continuacin.

Usando '\G' en lugar de ';' la salida se muestra en forma de listado, en lugar de en


forma de tabla. Este formato es ms cmodo a la hora de leer el resultado.
Programa Nacional de Informtica 63

www.fullengineeringbook.net
MySQL
Manual del Participante

La sentencia CREATE TABLE mostrada no tiene por qu ser la misma que se us


al crear la tabla originalmente. MySQL rellena las opciones que se activan de forma
implcita, y usa siempre el mismo formato para crear claves primarias.

Eliminar Tablas
A veces es necesario eliminar una tabla, ya sea porque es ms sencillo crearla de
nuevo que modificarla, o porque ya no es necesaria.

Para eliminar una tabla se usa la sentencia DROP TABLE. La sintaxis de esta
sentencia se muestra a continuacin:

DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...

En el siguiente ejemplo se elimina la tabla Cursos5. ver la siguiente figura.

Se pueden aadir las palabras IF EXISTS para evitar errores si la tabla a eliminar
no existe.

64

www.fullengineeringbook.net
MySQL
Manual del Participante

Eliminar una base de datos


De modo parecido a la eliminacin de la tablas, se pueden eliminar bases de datos
completas, usando la sentencia DROP_DATABASE. La sintaxis de esta sentencia es la
siguiente.

DROP DATABASE [IF EXISTS] db_name

Hay que tener cuidado, ya que al borrar cualquier base de datos se elimina tambin su
contenido. Veamos a continuacin un ejemplo.

En el ejemplo anterior se ha creado la base de datos Ejemplo1, luego se muestra una lista
de base de datos existentes y por ltimo se ha eliminado las bases de datos Ejemplo1 y
Demo.

Programa Nacional de Informtica 65

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Cuando nos conectamos a un servidor de MySQL


Qu representa el parmetro h?
2. La instruccin para crear una base de datos pertenece al DML o al DDL?
3. Cul es la instruccin que me permite ver la coleccin de base de datos del
servidor?
4. Para que nos serviria definir una columna AUTO_INCREMENTADA?
5. Los COMMENT son atributos?
6. Cmo creara una clave primaria compuesta por dos atributos?
7. Crear la siguiente estructura de datos (sugiera el tipo de datos para cada atributo).

En la tabla personas:
Sexo debe admitir: 1 y 0. 1=Masculino, 0=Femenino por defecto debe
almacenar el valor (0)
En la tabla alumnos:
NEstudios debe admitir:P,S,B,X. P=Primaria, S=Secundaria, B=Bachillerato,
X=Superior; por defecto debe almacenar el valor X
En la tabla Profesores:
ECivil debe admitir: C, D, S, V. C=Casado, D=Divorciado, S=Soltero,
V=Viudo , por defecto debe almacenar el valor S

66

www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 5
Manipulacin de Datos

Objetivos
Al finalizar este capitulo, el participante aprender a :
 Insertar registros en una tabla existente
 Reemplazar informacin de las tablas existentes
 Actualizar informacin de las tablas existentes
 Eliminar informacin existente en una tabla
 Vaciar completamente la informacin contenida en una tabla.

Una base de datos sin datos no sirve de mucho, de modo que veremos cmo agregar,
modificar o eliminar los datos que contienen nuestras bases de datos.

Insertar Registros
La forma directa de insertar una fila nueva en una tabla es mediante una sentencia
INSERT. En la forma ms simple de esta sentencia debemos indicar la tabla a la que
queremos aadir filas, y los valores de cada columna. Las columnas de tipo cadena o
fechas deben estar entre comillas simples o dobles, para las columnas nmericas esto no
es imprescindible, aunque tambin pueden estar entrecomilladas. Veamos un sencillo
ejemplo en la siguiente figura.

Programa Nacional de Informtica 67

www.fullengineeringbook.net
MySQL
Manual del Participante

Si no necesitamos asignar un valor concreto para alguna columna, podemos asignarle el


valor por defecto indicado para esa columna cuando se cre la tabla, usando la palabra
DEFAULT. Ver la figura siguiente.

En este caso, como habamos definido un valor por defecto para la columna NroHoras de
30, se asignar ese valor para la fila correspondiente a 'OO-Writer

Otra opcin consiste en indicar una lista de columnas para las que se van a suministrar
valores. A las columnas que no se nombren en esa lista se les asigna el valor por defecto.
Este sistema, adems, permite usar cualquier orden en las columnas, con la ventaja, con
respecto a la anterior forma, de que no necesitamos conocer el orden de las columnas en
la tabla para poder insertar datos.

68

www.fullengineeringbook.net
MySQL
Manual del Participante

Cuando creamos la tabla "Cursos5" definimos tres columnas: 'IdCurso', 'Nombre' y


'NroHoras'. Ahora hemos insertado cuatro filas, en las que hemos omitido la clave, y
hemos alterado el orden de 'IdCurso' y 'Nombre '. El valor de la 'clave' se calcula
automticamente, ya que lo hemos definido como auto-incrementado.

Existe otra sintaxis alternativa, que consiste en indicar el valor para cada columna. Ver la
figura siguiente.

Una vez ms, a las columnas para las que no indiquemos valores se les asignarn sus
valores por defecto. Tambin podemos hacer esto usando el valor DEFAULT.

Para las sintaxis que lo permiten, podemos observar que cuando se inserta ms de una
fila en una nica sentencia, obtenemos un mensaje desde MySQL que indica el nmero
de filas afectadas, el nmero de filas duplicadas y el nmero de avisos.

Para que una fila se considere duplicada debe tener el mismo valor que una fila existente
para una clave principal o para una clave nica. En tablas en las que no exista clave
primaria ni ndices de clave nica no tiene sentido hablar de filas duplicadas. Es ms, en
esas tablas es perfectamente posible que existan filas con los mismos valores para todas
las columnas.

Por ejemplo, si tenemos una tabla Clientes con la columna nombres definida como clave
nica e intentamos ingresar dos nombres iguales no generaria un error. Ver figura
siguiente.

Programa Nacional de Informtica 69

www.fullengineeringbook.net
MySQL
Manual del Participante

Como se puede apreciar, en la ilustracin anterior, el tratar de insertar dos veces el


nombre de Luis genera un error y la sentencia no se ejecuta, pues la columna nombres
se defini como UNIQUE.

Sin embargo existe una opcin que podemos usar para los casos de claves duplicadas:
ON DUPLICATE KEY UPDATE. En este caso podemos indicar a MySQL qu debe hacer
si se intenta insertar una fila que ya existe en la tabla. Las opciones son limitadas: no
podemos insertar la nueva fila, sino nicamente modificar la que ya existe. Por ejemplo,
en la tabla 'Clientes' podemos usar el ltimo valor de la cuota en caso de que la fila se
repita:

70

www.fullengineeringbook.net
MySQL
Manual del Participante

En el ejemplo anterior, la segunda vez que intentamos insertar la fila correspondiente a


'Pedro' se usar el nuevo valor de la cuota. Si en lugar de VALUES(Cuota) usamos Cuota,
el nuevo valor de Cuota se ignora. Tambin podemos usar cualquier expresin. Veamos
el siguiente ejemplo.

Reemplazar registros
Existe una sentencia REPLACE, que es una alternativa para INSERT, que slo se
diferencia en que si existe algn registro anterior con el mismo valor para una clave
primaria o nica, se elimina el viejo y se inserta el nuevo en su lugar.

La sintaxis de esta instruccin es la siguiente:

Programa Nacional de Informtica 71

www.fullengineeringbook.net
MySQL
Manual del Participante

REPLACE [LOW_PRIORITY | DELAYED]


[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...

REPLACE [LOW_PRIORITY | DELAYED]


[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...

En el siguiente ejemplo se sustituyen las filas correspondientes a 'Luis, 'Enrique' y


Ronald que ya existan en la tabla y se inserta la de 'Alvaro' que no estaba previamente.

Las mismas sintaxis que existen para INSERT, estn disponibles para REPLACE.
Veamos el siguiente ejemplo.

72

www.fullengineeringbook.net
MySQL
Manual del Participante

Actualizar Registros
Podemos modificar valores de las filas (registros) de una tabla usando la sentencia
UPDATE. En su forma ms simple, los cambios se aplican a todas las filas, y a las
columnas que especifiquemos.

La sintaxis de esta sentencia es la siguiente:

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name


SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

Por ejemplo, podemos aumentar en un 10% la cuota de todos los clientes de la tabla
Clientes usando la siguiente sentencia:

Programa Nacional de Informtica 73

www.fullengineeringbook.net
MySQL
Manual del Participante

Podemos, del mismo modo, actualizar el valor de ms de una columna, separandolas en


la seccin SET mediante comas. Veamos el siguiente ejemplo.

En el ejemplo anterior hemos incrementado el valor de la columna 'Codigo en 10


unidades y disminuido el de la columna 'Cuota' en un 3%, para todas las filas.

Pero no tenemos por qu actualizar todas las filas de la tabla. Podemos limitar el nmero
de filas afectadas de varias formas.

74

www.fullengineeringbook.net
MySQL
Manual del Participante

La primera es mediante la clusula WHERE. Usando esta clusula podemos establecer


una condicin. Slo las filas que cumplan esa condicin sern actualizadas. El siguiente
ejemplo muestra como hacerlo.

En este caso hemos establecido la Cuota en 50 de los Clientes cuyo nombre sea 'Pedro'.
Las condiciones pueden ser ms complejas. Existen muchas funciones y operadores que
se pueden aplicar sobre cualquier tipo de columna, y tambin podemos usar operadores
booleanos como AND u OR.

Otra forma de limitar el nmero de filas afectadas es usar la clusula LIMIT. Esta clusula
permite especificar el nmero de filas a modificar. Veamos el siguiente ejemplo.

Programa Nacional de Informtica 75

www.fullengineeringbook.net
MySQL
Manual del Participante

En el ejemplo anterior hemos establecido la Cuota en 10 unidades para las dos primeras
filas.

Esta clusula se puede combinar con WHERE, de modo que slo las 'n' primeras filas que
cumplan una determinada condicin se modifiquen.

Sin embargo esto no es lo habitual, ya que, si no existen claves primarias o nicas, el


orden de las filas es arbitrario, no tiene sentido seleccionarlas usando slo la clusula
LIMIT.

La clusula LIMIT se suele asociar a la clusula ORDER BY. Por ejemplo, si queremos
modificar 2 filas con las cuotas mas altas de la tabla 'Clientes', usaremos la siguiente
sentencia:

Cuando exista una clave primaria o nica, se usar ese orden por defecto, si no se
especifica una clusula ORDER BY.

76

www.fullengineeringbook.net
MySQL
Manual del Participante

Eliminar Registros
Para eliminar filas (registros) se usa la sentencia DELETE. La sintaxis es muy parecida a
la de UPDATE.

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name


[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]

La forma ms simple es no usar ninguna de las clusulas opcionales. Veamos un ejemplo


sencillo.

De este modo se eliminan todas las filas de la tabla.

Pero es muy frecuente que slo se quiera eliminar ciertas filas que cumplan determinadas
condiciones. La forma ms normal de hacer esto es usar la clusula WHERE. Veamos
otro ejemplo.

Tambin podemos usar las clusulas LIMIT y ORDER BY del mismo modo que en la
sentencia UPDATE, por ejemplo, para eliminar a dos clientes con las cuotas ms baja
utilizariamos la siguiente instruccin.

Programa Nacional de Informtica 77

www.fullengineeringbook.net
MySQL
Manual del Participante

Vaciar una tabla


Cuando queremos eliminar todas la filas de una tabla, vimos en el punto anterior que
podamos usar una sentencia DELETE sin condiciones. Sin embargo, existe una
sentencia alternativa, TRUNCATE, que realiza la misma tarea de una forma mucho ms
rpida.

La diferencia es que DELETE hace un borrado secuencial de la tabla, fila a fila. Pero
TRUNCATE borra la tabla y la vuelve a crear vaca, lo que es mucho ms eficiente. El
siguiente ejemplo muestra como usar esta instruccin.

78

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Suponga que tiene la tabla productos con 2 campos: Nombre del producto tipo
CHAR y el precio tipo DECIMAL, siendo el primer campo la clave. Si ejecutamos la
siguiente instruccin:
INSERT INTO Productos (NombreProducto, Precio) VALUES
('Pepsi', 3.0),
('Coca Cola', 3.5),
('Inka Kola', 3.5),
('Pepsi', 2.0);
Cuntos Filas se insertarn en la tabla productos?Por que?

2. Qu ocurre cuando ejecutamos la siguiente instruccin?


INSERT INTO Productos (NombreProducto, Precio) VALUES
('Pepsi', 2.0),
ON DUPLICATE KEY UPDATE Precio=VALUES(Precio);

3. Se desea aumentar el precio de todos los productos con el 10% de su valor actual.
Cul sera la instruccin que permita dicha actualizacin?
4. Cul es la diferencia entre la instruccin INSERT INTO y REPLACE INTO?
5. Cul es la diferencia entre la instruccin REPLACE INTO y UPDATE SET ?
6. A cuantos registros de la tabla productos actualiza la siguiente instruccin?
UPDATE Productos SET Precio=Precio*1.1
WHERE Precio>3 LIMIT 3;

7. Cul es la diferencia entre DELETE FROM y TRUNCATE TABLE?


8. Cuntos registros elimina la siguiente instruccin?
TRUNCATE TABLE Productos;

Programa Nacional de Informtica 79

www.fullengineeringbook.net
www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 6
Seleccin de Datos

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Seleccionar registros de datos en forma incondicional.
 Filtrar la salida de datos al seleccionar registros.
 Mostrar y eliminar registros repetidos
 Agrupar resultados para generar resumenes de datos
 Filtrar resultados agrupados
 Ordenar la seleccin de datos.

Ya disponemos de bases de datos, y sabemos cmo insertar, actualizar y eliminar datos.


Ahora aprenderemos a extraer datos de una base de datos. Para ello volveremos a usar
la sentencia SELECT.

La sintaxis de SELECT es compleja, pero en este captulo no explicaremos todas sus


opciones. Una forma general consiste en la siguiente sintaxis.

SELECT [ALL | DISTINCT | DISTINCTROW]


expresion_select,...
FROM referencias_de_tablas
WHERE condiciones
[GROUP BY {nombre_col | expresion | posicion}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING condiciones]
[ORDER BY {nombre_col | expresion | posicion}
[ASC | DESC] ,...]
[LIMIT {[desplazamiento,] contador | contador OFFSET desplazamiento}]

Forma incondicional
La forma ms sencilla es la que hemos usado hasta ahora, consiste en pedir todas las
columnas y no especificar condiciones. Veamos el siguiente ejemplo.

Programa Nacional de Informtica 81

www.fullengineeringbook.net
MySQL
Manual del Participante

Limitar las columnas


Recordemos que una de las operaciones del lgebra relacional es la proyeccin, que
consiste en seleccionar determinados atributos de una relacin.

Mediante la sentencia SELECT es posible hacer una proyeccin de una tabla,


seleccionando las columas de las que queremos obtener datos. En la sintaxis que hemos
mostrado, la seleccin de columnas corresponde con la parte "expresion_select". En el
ejemplo anterior hemos usado '*', que quiere decir que se muestran todas las columnas.

Pero podemos usar una lista de columnas, y de ese modo slo se mostrarn esas
columnas. Vemos el siguiente ejemplo.

82

www.fullengineeringbook.net
MySQL
Manual del Participante

Las expresiones_select no se limitan a nombres de columnas de tablas, pueden ser otras


expresiones, incluso aunque no correspondan a ninguna tabla. Veamos el siguiente
ejemplo.

Como se aprecia en la ilustracin anterior, en las expresiones _select podemos usar


funciones, y aqu hemos usando la funcin SIN para calcular el seno de /2.

Tambin podemos aplicar funciones sobre columnas de tablas, y usar esas columnas en
expresiones para generar nuevas columnas. En el ejemplo siguiente se calcula la edad de
cada una de las personas.

Alias
Tambin es posible asignar un alias a cualquiera de las expresiones select. Esto se puede
hacer usando la palabra AS, aunque esta palabra es opcional. En el siguiente ejemplo se
le pone un nombre a la nueva columna.

Programa Nacional de Informtica 83

www.fullengineeringbook.net
MySQL
Manual del Participante

Mostrar Registros Repetidos


Ya que podemos elegir slo algunas de las columnas de una tabla, es posible que se
produzcan filas repetidas, debido a que se haya excluido las columnas nicas. Por
ejemplo, si aadimos a dos personas que tengan la misma fecha de nacimiento de dos
personas existentes en la tabla Personas, los datos quedarian de la siguiente manera.

Como podr apreciar en la figura anterior, el registro correspondiente a Linares Jorge


tiene una fecha de nacimiento que coincide con la fecha de nacimiento de Alfaro
Enrique, lo mismo sucede con la fecha de nacimiento de Suarez Pedro y Diaz
Manuel. Al seleccionar, unicamente, la columna FNacimiento obtendremos el siguiente
resultado (ver figura siguiente).

84

www.fullengineeringbook.net
MySQL
Manual del Participante

En el resultado de la figura anterior, se aprecia que existen dos valores de filas repetidos,
para la fecha "1958-10-26" y para "1961-08-13". Para evitar un resultado con filas
repetidas se debe usar DISTINCT y DISTINCTROW (ambas son sinonimos). Veamos la
siguiente instruccin.

Limitar las filas en la seleccin de registros


Una de las operaciones del lgebra relacional es la seleccin, que consite en seleccionar
filas de una relacin que cumplen determinadas condiciones. Lo que es ms til de una
base de datos es la posibilidad de hacer consultas en funcin de ciertas condiciones.
Generalmente nos interesar saber qu filas se ajustan a determinados parmetros. Por
supuesto, SELECT permite usar condiciones como parte de su sintaxis, es decir, para
hacer selecciones. Esto se realiza mediante la clusula WHERE, veamos algunos
ejemplos:

Programa Nacional de Informtica 85

www.fullengineeringbook.net
MySQL
Manual del Participante

En una clusula WHERE se puede usar cualquier funcin disponible en MySQL,


excluyendo slo las de resumen o reunin, que veremos a continuacin. Esas funciones
estn diseadas especficamente para usarse en clusulas GROUP BY.

Tambin se puede aplicar lgica booleana para crear expresiones complejas.


Disponemos de los operadores AND, OR, XOR y NOT.

Agrupar filas
Es posible agrupar filas en la salida de una sentencia SELECT segn los distintos valores
de una columna, usando la clusula GROUP BY. Veamos el siguiente ejemplo.

86

www.fullengineeringbook.net
MySQL
Manual del Participante

Como se puede apreciar en la figura anterior, el uso de GROUP BY puede parecer


redundante ya que podramos hacer lo mismo usando la opcin DISTINCT. Sin embargo,
la clusula GROUP BY es ms potente.

La primera diferencia que observamos es que si se usa GROUP BY la salida se ordena


segn los valores de la columna indicada. En este caso, las columnas aparecen
ordenadas por fechas.

Otra diferencia es que se eliminan los valores duplicados an si la proyeccin no contiene


filas duplicadas, por ejemplo.

En este caso se eliminaron los registros de Linares Jorge y Diaz Manuel. Sin embargo,
la diferencia principal es que el uso de la clusula GROUP BY permite usar funciones de
resumen o reunin. Por ejemplo, la funcin COUNT(), que sirve para contar las filas de
cada grupo. El siguiente ejemplo ilustra el uso de la funcin COUNT().

La sentencia anterior muestra todas las fechas diferentes y el nmero de filas para cada

Programa Nacional de Informtica 87

www.fullengineeringbook.net
MySQL
Manual del Participante

fecha. Existen otras funciones de resumen o reunin, como MAX(), MIN(), SUM(), AVG(),
STD(), VARIANCE(). etc.

Estas funciones tambin se pueden usar sin la clusula GROUP BY siempre que no se
proyecten otras columnas. Veamos el siguiente ejemplo, donde se cuentan el Nro de
registros que existen en la tabla Personas

Clusula HAVING
La clusula HAVING permite hacer selecciones en situaciones en las que no es posible
usar WHERE. Veamos un ejemplo completo.

88

www.fullengineeringbook.net
MySQL
Manual del Participante

Ordenar resultados
Podemos aadir una clusula de orden ORDER BY para obtener resultados ordenados
por la columna que se desee. La siguiente figura muestra el uso de la clusula ORDER
BY.

Existe una opcin para esta clusula para elegir el orden, ascendente o descendente. Se
puede aadir a continuacin ASC o DESC, respectivamente. Por defecto se usa el orden
ascendente, de modo que el modificador ASC es opcional. Veamos el ejemplo siguiente.

Limitar la salida del nmero de registros


La clusula LIMIT permite limitar el nmero de filas devueltas. Esta clusula se suele usar
para obtener registros por grupos, y no sobrecargar demasiado al servidor, o a la
aplicacin que recibe los resultados.

Programa Nacional de Informtica 89

www.fullengineeringbook.net
MySQL
Manual del Participante

Para poder hacer esto la clsula LIMIT admite dos parmetros. Cuando se usan los dos,
el primero indica el nmero de la primera fila a recuperar, y el segundo el nmero de filas
a recuperar. La siguiente figura muestra el uso de la clusula LIMIT para recuperar los
registros de dos en dos.

90

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. En que consiste la proyeccin de datos?


2. Utilizando la tabla empleados de lafigura siguiente. Cul sera la instruccin para
calcular los aos de servicio de cada empleado?.

3. Cul seria la instruccin para obtener los trabajadores de un ao determinado?


4. Cuntos empleados ingresaron a laborar despus de 1970?
5. Crear una seleccin de datos en donde se muestre a los empleados ordenados
por Fecha de ingreso
6. Crear una consulta para mostrar a los 2 empleados mas antiguos
7. Cul seria la instruccin para obtener el nmero de empleados por ao de
ingreso?
8. Cuntos trabajadores tienen mas de 35 aos de servicio?
9. Calcular los de servicio promedio de todos los empleados.

Programa Nacional de Informtica 91

www.fullengineeringbook.net
www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 7
Operadores del lenguaje SQL

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Conocer y usar los operadores de asignacin
 Crear expresiones lgicas mediante el uso de operadores logicos y de comparacin.
 Conocer y usar los operadores aritmticos.
 Conocer el funcionamiento y uso del operador de control de flujo CASE
 Comparar valores tipo cadena y usar expresiones regulares mediante la manipulacin
de operadores de cadena.

MySQL dispone de multitud de operadores diferentes para cada uno de los tipos de
columna. Esos operadores se utilizan para construir expresiones que se usan en
clusulas ORDER BY y HAVING de la sentencia SELECT y en las clusulas WHERE de
las sentencias SELECT, DELETE y UPDATE.

Operador de asignacin
En MySQL podemos crear variables y usarlas porteriormente en expresiones. Para crear
una variable hay dos posibilidades. La primera consiste en usar la sentencia SET, tal y
como se aprecia en la siguiente figura.

Otra alternativa, es definir variables de usuario dentro de una sentencia SELECT. Veamos
el siguiente ejemplo.

Programa Nacional de Informtica 93

www.fullengineeringbook.net
MySQL
Manual del Participante

Como se aprecia en la figura anterior, en esta segunda forma usamos el operador de


asignacin :=. Otros ejemplos del uso de variables de usuario pueden ser los siguientes.

Una variable sin asignar ser de tipo cadena y tendr el valor NULL. Ver figura Siguiente.

En el ejemplo anterior a la variable @XY no se le a asign, previamente, ningn valor.

94

www.fullengineeringbook.net
MySQL
Manual del Participante

Operadores lgicos
Los operadores lgicos se usan para crear expresiones lgicas complejas. Permiten el
uso de lgebra booleana, y nos ayudarn a crear condiciones mucho ms precisas. En el
lgebra booleana slo existen dos valores posibles para los operandos y los son
resultados: verdadero y falso. MySQL dispone de dos constantes para esos valores:
TRUE y FALSE, respectivamente.

MySQL aade un tercer valor: desconocido. Esto es para que sea posible trabajar con
valores NULL. La siguiente figura ilustra el uso de estos tres valores.

Operador Y
En MySQL se puede usar tanto la forma AND como &&, es decir, ambas formas se
refieren al mismo operador: Y lgico.

Se trata de un operador binario, es decir, require de dos operandos. El resultado es


verdadero slo si ambos operandos son verdaderos, y falso si cualquier operando es
falso. Esto se representa mediante la siguiente tabla de la verdad.

A B A AND B
Verdadero Verdadero Verdadero
Verdadero Falso Falso
Falso Verdadero Falso
Falso Falso Falso
NULL Verdadero NULL
NULL Falso Falso
Verdadero NULL NULL
Falso NULL Falso

Al igual que todos lo operadores binarios que veremos, el operador Y se puede asociar,

Programa Nacional de Informtica 95

www.fullengineeringbook.net
MySQL
Manual del Participante

es decir, se pueden crear expresiones como A AND B AND C. El hecho de que se


requieran dos operandos significa que las operaciones se realizan tomando los operandos
dos a dos, y estas expresiones se evalan de izquierda a derecha. Primero se evala A
AND B, y el resultado, R, se usa como primer operando de la siguiente operacin R AND
C.

Operador O
En MySQL este operador tambin tiene dos formas equivalentes OR y ||. El operador O
tambin es binario. Si ambos operandos son distintos de NULL, entonces, el resultado es
verdadero si cualquiera de ellos es verdadero, y falso si ambos son falsos. Si uno de los
operandos es NULL y el otro es verdadero, entonces el resultado es verdadero. La tabla
de la verdad, de este operador, es la siguiente.

A B A OR B
Verdadero Verdadero Verdadero
Verdadero Falso Verdadero
Falso Verdadero Verdadero
Falso Falso Falso
NULL Verdadero Verdadero
NULL Falso NULL
Verdadero NULL Verdadero
Falso NULL NULL

Operador O exclusivo
XOR tambin es un operador binario, que devuelve NULL si cualquiera de los operandos
es NULL. Si ninguno de los operandos es NULL, entonces, devolver un valor verdadero
si uno de ellos es verdadero, y falso si ambos son verdaderos o ambos falsos. La tabla de
la verdad ser la siguiente.

A B A XOR B
Verdadero Verdadero Falso

96

www.fullengineeringbook.net
MySQL
Manual del Participante

Verdadero Falso Verdadero


Falso Verdadero Verdadero
Falso Falso Falso
NULL Verdadero NULL
NULL Falso NULL
Verdadero NULL NULL
Falso NULL NULL

Operador de negacin
El operador NOT, que tambin se puede escribir como !, es un operador unitario, es decir
slo afecta a un operando. Si el operando es verdadero devuelve falso, y viceversa. Si el
operando es NULL, entonces, el valor devuelto tambin es NULL. La tabla de la verdad
para este operador es la siguiente.

A NOT A
Verdadero Falso
Falso Verdadero

Operadores de comparacin
Para crear expresiones lgicas, a las que podremos aplicar el lgebra de Boole,
disponemos de varios operadores de comparacin. Estos operadores se aplican a
cualquier tipo de columna: fechas, cadenas, nmeros, etc, y devuelven valores lgicos:
verdadero o falso (1/0).

Los operadores de comparacin son los habituales en cualquier lenguaje de


programacin, pero adems, MySQL aade varios ms que resultan de mucha utilidad, ya
que son de uso muy frecuente.

Operador de igualdad
El operador = compara dos expresiones, y da como resultado 1 si son iguales, 0
si son diferentes. Veamos un ejemplo sencillo.

Programa Nacional de Informtica 97

www.fullengineeringbook.net
MySQL
Manual del Participante

Hay que mencionar que, al contrario que otros lenguajes, como C o C++, donde el
control de tipos es muy estricto, en MySQL se pueden comparar valores de tipos
diferentes, y el resultado ser el esperado. En el siguiente ejemplo, MySQL hace
una conversion implicita antes de comparar los valores numericos, arrojando
resultados correctos.

Operador de igualdad con NULL seguro


El operador <=> funciona igual que el operador =, salvo que si en la comparacin
una o ambas de las expresiones es nula el resultado no es NULL. Si se comparan
dos expresiones nulas, el resultado es verdadero. Veamos el siguiente ejemplo.

98

www.fullengineeringbook.net
MySQL
Manual del Participante

Operador de desigualdad
MySQL dispone de dos operadores equivalente para comprobar desigualdades, <>
y !=. Si las expresiones comparadas son diferentes, el resultado es verdadero, y si
son iguales, el resultado es falso. En el siguiente ejemplo, se compara 10 <> 15 y
el resultado es verdadero y 18 no es dieferente de 18.

Operadores de comparacin de magnitud


Disponemos de los cuatro operadores corrientes.

Operador Descripcin
> Mayor
< Menor
>= Mayor o igual que
<= Menor o igual que

Estos operadores tambin permiten comparar cadenas, fechas, y por supuesto,


nmeros. En el siguiente ejemplo se ilustra el uso de estos operadores.

La comparacion de cadenas se realiza de acuerdo al orden alfabetico de las


primeras letras y las fechas se comparan de acuerdo a la antigedad.

Programa Nacional de Informtica 99

www.fullengineeringbook.net
MySQL
Manual del Participante

Verificacin de NULL
Los operadores IS NULL e IS NOT NULL sirven para verificar si una expresin
determinada es o no nula. La sintaxis es la siguiente.

<expresin> IS NULL
<expresin> IS NOT NULL

En el siguiente ejemplo ilustramos el uso del opereador de verificacion nula.

Verificar pertenencia a un rango


Entre los operadores de MySQL, hay uno para comprobar si una expresin est
comprendida en un determinado rango de valores. La sintaxis de este operado es
es la siguiente.

<expresin> BETWEEN mnimo AND mximo


<expresin> NOT BETWEEN mnimo AND mximo

En realidad es un operador prescindible, ya que se puede usar en su lugar dos


expresiones de comparacin y el operador AND. Los dos ejemplos, que se
exponen a continuacion, son equivalentes.

100

www.fullengineeringbook.net
MySQL
Manual del Participante

De modo similar las dos expresiones, que se aprecian en el ejemplo siguiente,


tambin son equivalentes.

Eleccin de no nulos
El operador COALESCE sirve para seleccionar el primer valor no nulo de una lista
o conjunto de expresiones. La sintaxis es la siguiente.

COALESCE(<expr1>, <expr2>, <expr3>...)

El resultado es el valor de la primera expresin distinta de NULL que aparezca en


la lista. En el ejemplo siguiente, la variable @C contiene un valor nulo y no es
tomada en cuenta.

Programa Nacional de Informtica 101

www.fullengineeringbook.net
MySQL
Manual del Participante

Valores mximo y mnimo de una lista


Los operadores GREATEST y LEAST devuelven el valor mximo y mnimo,
respectivamente, de la lista de expresiones dada. La sintaxis es la siguiente.

GREATEST(<expr1>, <expr2>, <expr3>...)


LEAST(<expr1>, <expr2>, <expr3>...)

La lista de expresiones debe contener al menos dos valores.


Los argumentos se comparan segn estas reglas:

Si el valor de retorno se usa en un contexto entero, o si todos los elementos


de la lista son enteros, estos se comparan entre si como enteros.

Si el valor de retorno se usa en un contexto real, o si todos los elementos


son valores reales, sern comparados como reales.

Si cualquiera de los argumentos es una cadena sensible al tipo (maysculas


y minsculas son caracteres diferentes), los argumentos se comparan como
cadenas sensibles al tipo.

En cualquier otro caso, los argumentos se comparan como cadenas no


sensibles al tipo.

102

www.fullengineeringbook.net
MySQL
Manual del Participante

Verificar conjuntos
Los operadores IN y NOT IN sirven para averiguar si el valor de una expresin
determinada est dentro de un conjunto indicado. La sintaxis es la siguiente.

IN (<expr1>, <expr2>, <expr3>...)


NOT IN (<expr1>, <expr2>, <expr3>...)

El operador IN devuelve un valor verdadero, 1, si el valor de la expresin es igual a


alguno de los valores especificados en la lista. El operador NOT IN devuelve un
valor falso en el mismo caso. En el siguiente ejemplo se aprecia el uso de este
operador.

Verificar nulos
El operador ISNULL es equivalente a IS NULL. La sintaxis es la siguiente:

ISNULL(<expresin>)

Programa Nacional de Informtica 103

www.fullengineeringbook.net
MySQL
Manual del Participante

En el siguiente ejemplo se muestra la verificacin de nulos.

Encontrar intervalo
Se puede usar el operador INTERVAL para calcular el intervalo al que pertenece
un valor determinado. La sintaxis es la siguiente.

INTERVAL(<expresin>, <lmite1>, <limite2>, ... <limiten>)

Si el valor de la expresin es menor que lmite1, el operador regresa con el valor 0,


si es mayor o igual que lmite1 y menor que limite2, regresa con el valor 1, etc.
Todos los valores de los lmites deben estar ordenados, ya que MySQL usa el
algoritmo de bsqueda binaria. En el siguiente ejemplo se busca el valor 17 en el
intervalo de 0 a 20. (ver la figura la siguiente)

Operadores aritmticos
Los operadores aritmticos se aplican a valores numricos, ya sean enteros o en coma
flotante. El resultado siempre es un valor numrico, entero o en coma flotante.

MySQL dispone de los operadores aritmticos habituales: suma, resta, multiplicacin y


divisin.

104

www.fullengineeringbook.net
MySQL
Manual del Participante

En el caso de los operadores de suma, resta, cambio de signo y multiplicacin, si los


operandos son enteros, el resultado se calcula usando el tipo BIGINT, es decir, enteros de
64 bits. Hay que tener esto en cuenta, sobre todo en el caso de nmeros grandes.

Operador de adicin o suma


El operador para la suma es el simbolo + y se usa para la adicion de valores
numericos. En la siguiente figura se parecia un ejemplo sencillo.

Este operador, al igual que el de resta, multiplicacin y divisin, es binario. Como


comentamos al hablar de los operadores lgicos, esto no significa que no se
puedan asociar, sino que la operaciones se realizan tomando los operandos dos a
dos.

Operador de sustraccin o resta


Tambin con la misma lgica, el operador para restar es el y sirve para restar un
valor de otro. Veamos un sencillo ejemplo.

Operador unitario menos


Este operador, que tambin usa el smbolo -, se aplica a un nico operando, y
como resultado se obtiene un valor de signo contrario. Veamos un ejemplo.

Programa Nacional de Informtica 105

www.fullengineeringbook.net
MySQL
Manual del Participante

Operador de producto o multiplicacin


Tambin es un operador binario, el smbolo usado es el asterisco, *. Vemos el uso
de * a travs de un ejemplo simple.

Operador de cociente o divisin


El resultado de las divisiones, por regla general, es un nmero en coma flotante.
Por supuesto, tambin es un operador binario, y el smbolo usado es /. Dividir por
cero produce como resultado el valor NULL. En el siguiente ejemplo se aprecia su
uso.

Operador de divisin entera


Existe otro operador para realizar divisiones, pero que slo calcula la parte entera
del cociente. El operador usado es DIV. Veamos el siguiente ejemplo.

106

www.fullengineeringbook.net
MySQL
Manual del Participante

Operadores de control de flujo


En MySQL no siempre es sencillo distinguir los operadores de las funciones. En el caso
del control de flujo slo veremos un operador, el CASE.

Operador CASE
Existen dos sintaxis alternativas para CASE.

CASE valor WHEN [valor1] THEN resultado1 [WHEN [valori] THEN


resultadoi ...] [ELSE resultado] END
CASE WHEN [condicin1] THEN resultado1 [WHEN [condicini] THEN
resultadoi ...] [ELSE resultado] END

La primera forma devuelve el resultado para el valor i que coincida con valor. La
segunda forma devuelve el resultado para la primera condicin verdadera. Si no
hay coincidencias, se devuelve el valor asociado al ELSE, o NULL si no hay parte
ELSE.

Otra Forma de utilizar el operado CASE es escribiendo la condicin dentro de WHEN, tal

Programa Nacional de Informtica 107

www.fullengineeringbook.net
MySQL
Manual del Participante

y como se aprecia en la siguiente figura.

Operadores para cadenas


MySQL dispone de varios operadores para comparacin de cadenas, con patrones y con
expresiones regulares.

Operador LIKE
El operador LIKE se usa para hacer comparaciones entre cadenas y patrones. El
resultado es verdadero (1) si la cadena se ajusta al patrn, y falso (0) en caso
contrario. Tanto si la cadena como el patrn son NULL, el resultado es NULL. La
sintaxis es la siguiente.

<expresin> LIKE <patrn> [ESCAPE 'carcter_escape']

Los patrones son cadenas de caracteres en las que pueden aparecer, en cualquier
posicin, los caracteres especiales '%' y '_'. El significado de esos caracteres se
puede ver en la tabla siguiente.

Caracter Descripcin

108

www.fullengineeringbook.net
MySQL
Manual del Participante

Coincidencia con cualquier nmero de


%
caracteres, incluso ninguno.
_ Coincidencia con un nico carcter.

El siguiente ejemplo muestra el uso del operador LIKE.

En la figura anterior, en el primer ejemplo la cadena "PNI-Trujillo" se ajusta a "_N%", ya


que el carcter 'P' se ajusta a la parte '_' del patrn, y la subcadena "I-Trujillo" a la parte
'%'. En el segundo ejemplo se muestran todas las personas que coincidan con el patron
A%.

La comparacin es independiente del tipo de los caracteres, es decir, LIKE no distingue


maysculas de minsculas, salvo que se indique lo contrario. Ver figura siguiente.

En MySQL, LIKE tambin funciona con expresiones numricas. (Esto es una extensin a

Programa Nacional de Informtica 109

www.fullengineeringbook.net
MySQL
Manual del Participante

SQL). Ver figura siguiente.

Operador NOT LIKE


La sintaxis es la siguiente.

<expresin> NOT LIKE <patrn> [ESCAPE 'carcter_escape']

Esta sintaxis es equivale a.

NOT (<expresin> LIKE <patrn> [ESCAPE 'carcter_escape'])

En el siguiente ejemplo se muestran a todas las personas cuyo nombre no


empiezan con la letra A. Ver figura siguinte.

110

www.fullengineeringbook.net
MySQL
Manual del Participante

Operadores REGEXP y RLIKE


Al igual que LIKE el operador REGEXP (y su equivalente RLIKE), comparan una
expresin con un patrn, pero en este caso, el patrn puede ser una expresin
regular extendida. La sintaxis de estos operadores es la siguiente.

<expresin> RLIKE <patrn>


<expresin> REGEXP <patrn>

El valor de retorno es verdadero (1) si la expresin coincide con el patrn, en caso


contrario devuelve un valor falso (0). Tanto si la expresin como el patrn son
nulos, el resultado es NULL.

El patrn no tiene que ser necesariamente una cadena, puede ser una expresin o
una columna de una tabla.

En el siguinte ejemplo se comprueba si la letra S esta comprendida en el rango de


letras de la A a la D y en el rango A a Z. Ver la figura siguiente.

A continuacin otro ejemplo en donde se aplica el operador REGEXP para mostrar a las
personas cuyo nombre estan comprendido entre las letras D a la S. Ver figura siguiente.

Programa Nacional de Informtica 111

www.fullengineeringbook.net
MySQL
Manual del Participante

Precedencia de operadores
Las precedencias de los operadores son las que se muestran en la siguiente tabla,
empezando por la menor:

Operador
:=
||, OR, XOR
&&, AND
NOT
BETWEEN, CASE, WHEN, THEN, ELSE
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
|
&
<<, >>
-, +
*, /, DIV, %, MOD
^
- (unitario), ~ (complemento)
!
BINARY, COLLATE

112

www.fullengineeringbook.net
MySQL
Manual del Participante

Parntesis
Como en cualquier otro lenguaje, los parntesis se pueden usar para forzar el orden de la
evaluacin de determinadas operaciones dentro de una expresin. Cualquier expresin
entre parntesis adquiere mayor precedencia que el resto de las operaciones en el mismo
nivel de parntesis. En la siguiente figura se muestra un sencillo ejemplo de agrupamiento
con parntesis.

Programa Nacional de Informtica 113

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Cuntas y cuales son las formas de asignar valores a una variable?


2. Qu valor devuelve la instruccin: SELECT ((5*8/2)>25) && (3*2)<>(9/3)?
3. Con la tabla de la figura siguiente, seleccionar los empleados que ingresaron entre
1960 y 1975.

4. Con la tabla del item 3. Motrar a los empleados que no son solteros (S) ni
casados (C).
5. Seleccionar los empleados divorciados con mas de 30 aos de servicio.
6. Mostrar la lista de empleados y que en la columna sexo se muestre los valores:
Masculino (1) o Femenino(0)
7. Seleccionar los empleados cuyo nombre empieza con la letra A
8. Seleccionar los empleados cuyo nombre estan comeprendidos entre las letras P y
S

114

www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 8
Consultas MultiTabla

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Seleccionar datos de mas de una tabla
 Crear composiciones internas y externas
 Crear composiciones naturales
 Crear uniones de tablas.

Las consultas que hemos visto, hasta ahora, se refieren slo a una tabla, pero tambin es
posible hacer consultas usando varias tablas en la misma sentencia SELECT. Esto nos
permite realizar otras dos operaciones de lgebra relacional que an no hemos visto: el
producto cartesiano y la composicin.

Producto cartesiano
El producto cartesiano de dos tablas son todas las combinaciones de todas las filas de las
dos tablas. Usando una sentencia SELECT se proyecta todos los atributos de ambas
tablas. Los nombres de las tablas se indican en la clusula FROM separados con comas.

Para ver el funcionamiento de un producto cartesiano vamos a trabajar con dos nuevas
tablas: Instructores y Cursos a las cuales les vamos a insertar algunos registros. (ver
figuras siguientes)

Programa Nacional de Informtica 115

www.fullengineeringbook.net
MySQL
Manual del Participante

Veamos ahora el contenidos de las tablas instructores y cursos (Ver figura siguiente).

Ahora, usando una sentencia SELECT proyectamos los atributos de la tabla Instructores y
los atributos de la tabla Cursos (Puede proyectarse todos los atributos a travs de *). Los
nombres de las tablas deben indicarse en la clusula FROM separados por comas. (ver
figura siguiente).

116

www.fullengineeringbook.net
MySQL
Manual del Participante

Como puede observarse en al figura anterior, la salida de un producto cartesiano consiste


en todas las combinaciones de todas las tuplas (filas) de ambas tablas.

Composicin (Join)
Una composicin tipo Join es un producto cartesiano restringido, las tuplas (filas) que se
emparejan deben cumplir una determinada condicin. En el lgebra relacional slo hemos
hablado de composiciones en general. Sin embargo, en SQL se trabaja con varios tipos
de composiciones.

Composiciones internas
Todas las composiciones que hemos visto hasta ahora se denominan
composiciones internas. Para hacer una composicin interna se parte de un
producto cartesiano y se eliminan aquellas tuplas que no cumplen la condicin de
la composicin.

En el ejemplo anterior tenemos 16 tuplas procedentes del producto cartesiano de


las tablas Instructores y Cursos. Si la condicin para la composicin es que
Instructores.IdInstructor=Cursos.Instructor, tendremos que eliminar todas las tuplas
en que la condicin no se cumpla.

Estas composiciones se denominan internas porque en la salida no aparece


ninguna tupla que no est presente en el producto cartesiano, es decir, la

Programa Nacional de Informtica 117

www.fullengineeringbook.net
MySQL
Manual del Participante

composicin se hace en el interior del producto cartesiano de las tablas.

Las composiciones internas usan la siguiente sintaxis.

referencia_tabla, referencia_tabla
referencia_tabla [INNER | CROSS] JOIN referencia_tabla [condicin]

La condicin puede ser de la siguiente forma.

ON expresin_condicional | USING (lista_columnas)

La coma y JOIN son equivalentes, y las palabras INNER y CROSS son opcionales.
La condicin en la clusula ON puede ser cualquier expresin vlida para una
clusula WHERE, de hecho, en la mayora de los casos, son equivalentes.

La clusula USING nos permite usar una lista de atributos que deben ser iguales
en las dos tablas a componer.

Siguiendo con el mismo ejemplo, la condicin ms lgica para la composicin


interna entre Instructores y Cursos es la igualdad entre el identificador del Instructor
en la primera tabla y el atributo ID en la segunda. Veamos el siguiente ejemplo.

En la figura anterior se aprecia que los Instructores, Pajares y Suarez, que no


tienen asignado un Curso no aparecen en la seleccin.

118

www.fullengineeringbook.net
MySQL
Manual del Participante

La consulta anterior es equivalente a estas otras. (ver figura siguiente)

Composicin interna natural


Consiste en una proyeccin sobre un producto cartesiano restringido. Es decir, slo
elegimos determinadas columnas de ambas tablas, en lugar de seleccionar todas.
Podemos hacer esto a partir de una composicin general, eligiendo todas las
columnas menos las repetidas. (Ver figura siguiente)

Programa Nacional de Informtica 119

www.fullengineeringbook.net
MySQL
Manual del Participante

Como la columna ID existe en ambas tablas estamos obligados a usar el nombre


completo para esta columna. En este caso hemos optado por seleccionarlo como
Instructores.ID, pero hubiese sido igual usar Cursos.ID.

Tambin podemos definir alias para las tablas, y conseguir una consulta ms
compacta como la siguiente. (Ver figura siguiente)

Por supuesto, podemos usar JOIN y ON en lugar de la coma y de la clusula


WHERE. Veamos el siguiente ejemplo.

MySQL posee una sintaxis alternativa mucho mejor para hacer composiciones
internas naturales. La sintasis es la siguiente.
120

www.fullengineeringbook.net
MySQL
Manual del Participante

referencia_tabla NATURAL JOIN referencia_tabla

El siguiente ejemploilustra el uso de NATURAL JOIN.

Composiciones externas
Al contrario que con las composiciones internas, las externas no proceden de un
producto cartesiano. Por lo tanto, en estas pueden aparecer tuplas que no
aparecen en el producto cartesiano.

Para hacer una composicin externa se toman las tuplas de una de las tablas una a
una y se combinan con las tuplas de la otra.

Como norma general se usa un ndice para localizar las tuplas de la segunda tabla
que cumplen la condicin, y para cada tupla encontrada se aade una fila a la tabla
de salida. Si no existe ninguna tupla en la segunda tabla que cumpla las
condiciones, se combina la tupla de la primera con una nula de la segunda.

Las sintaxis para composiciones externas son las siguientes.

referencia_tabla LEFT [OUTER] JOIN referencia_tabla [join_condition]


referencia_tabla NATURAL LEFT [OUTER] JOIN referencia_tabla

referencia_tabla RIGHT [OUTER] JOIN referencia_tabla [condicin]


referencia_tabla NATURAL RIGHT [OUTER] JOIN referencia_tabla

La condicin puede ser como sigue.

Programa Nacional de Informtica 121

www.fullengineeringbook.net
MySQL
Manual del Participante

ON expresin_condicional | USING (lista_columnas)

En la prctica, la palabra OUTER es opcional.

Existen dos grupos de composiciones externas: izquierda y derecha, dependiendo


de cual de las tablas se lea en primer lugar.

Composicin externa izquierda


En estas composiciones se recorre la tabla de la izquierda y se buscan
tuplas en la de la derecha. Se crean usando la palabra LEFT (izquierda, en
ingls). Las sintaxis para la composicin externa izquierda es la siguiente.

referencia_tabla LEFT [OUTER] JOIN referencia_tabla [condicin]

En el siguiente ejemplo se tomar la primera tupla de Instructores, con un


valor de ID igual a 1, y se busca en la tabla Cursos las tuplas con un valor de
ID igual a 1. Lo mismo para la segunda tupla, con ID igual a 2.

En la tercera el ID es 3, y no existe ninguna tupla en Cursos con un valor de


ID igual a 3, por lo tanto se combina la tupla de Instructores con una tupla de
Cursos con todos los atributos igual a NULL. Veamos el siguiente ejemplo.

122

www.fullengineeringbook.net
MySQL
Manual del Participante

La quinta y la sexta fila, tienen valores NULL para NomCurso e ID de


Cursos, ya que no existen tuplas en esa tabla con un valor de ID igual a 3 o
4.

En contraposicin, una composicin interna dara la siguiente salida.

Composicin externa derecha


En este caso se recorre la tabla de la derecha y se buscan tuplas que
cumplan la condicin en la tabla izquierda. La sintaxis es equivalente y es la
siguiente.

referencia_tabla RIGHT [OUTER] JOIN referencia_tabla [condicin]

Probaremos RIGHT JOIN usando las mismas tablas que en el ejemplo


anterior, pero adicionaremos un par de filas a la tabla Cursos, las que
representaran cursos que no tienen un Instructor asignado. Veamos la
figura siguiente.

Programa Nacional de Informtica 123

www.fullengineeringbook.net
MySQL
Manual del Participante

Como se aprecia en la figura anterior, el curso de Programacin tiene


asigando el ID = 8 y el curso de Ensamblaje el ID=9, pero los ID de
profesores solo van del 1 al 4, lo cual significa que estos dos ltimos cursos
no tienen profesores asignados. La combinacin externa con RIGHT JOIN
tambien nos proporcionara esta misma informacin. Veamos la figura
siguiente.

El participante debe saber que es lo mismo usar una composicin derecha


de las tablas Instructores y Cursos que una composicin izquierda de las
tablas Cursos e Instructores. Es decir, la consulta anterior es equivalente a
esta otra. (Ver figura siguiente).

124

www.fullengineeringbook.net
MySQL
Manual del Participante

Composiciones naturales externas


Por supuesto, tambin podemos hacer composiciones externas naturales. La
sintaxis para estas composiciones es la siguiente.

referencia_tabla NATURAL LEFT [OUTER] JOIN referencia_tabla


referencia_tabla NATURAL RIGHT [OUTER] JOIN referencia_tabla

El problema con este tipo de combinaciones es que, si existen tuplas


aadidas con respecto a la composicin interna, no se eliminar ninguna
columna. Los mismos ejemplos anteriores, como composiciones naturales
externas seran las que apreciamos a continuacin en la siguiente figura.

Programa Nacional de Informtica 125

www.fullengineeringbook.net
MySQL
Manual del Participante

Uniones
En MySQL, tambin es posible realizar la operacin de lgebra relacional unin entre
varias tablas o proyecciones de tablas.

Para hacerlo se usa la sentencia UNION que permite combinar varias sentencias SELECT
para crear una nica tabla de salida.

Las condicin para que se pueda crear una unin es que las relaciones a unir deben tener
el mismo nmero de atributos, y adems deben ser de dominios compatibles.

El resultado se puede ordenar usando ORDER BY y tambin podemos seleccionar un


nmero limitado de filas mediante LIMIT. Veamos el siguiente ejemplo.

126

www.fullengineeringbook.net
MySQL
Manual del Participante

Dentro de cada sentencia SELECT se aplican todas las clusulas, proyecciones y


selecciones que se quiera, como en cualquier SELECT normal. La sintaxis completa
incluye dos modificadores adicionales.

SELECT ...
UNION [ALL | DISTINCT]
SELECT ...
[UNION [ALL | DISTINCT]
SELECT ...]

Los modificadores ALL y DISTINCT son opcionales, y si no se usa ninguno el


comportamiento es el mismo que si se usa DISTINCT.

Con ALL se muestran todas las filas, aunque estn repetidas, con DISTINCT slo se
muestra una copia de cada fila. Verf figura siguiente.

Programa Nacional de Informtica 127

www.fullengineeringbook.net
MySQL
Manual del Participante

Cabe sealar que sobre el resultado final no se pueden aplicar otras clusulas como
GROUP BY.

128

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Qu tipo de combinacin se utiliza en la siguiente intruccion: SELECT * FROM


Tabla1, Tabla2?
2. Qu es una composicin interna?
3. Cul es la diferencia entre una composicin interna y una externa?
4. En la siguiente figura se muestra dos tablas: Empleados y Ctacte que estan
relacionados mediante los campos Empleados.codigo y Ctacte.IdEmpleado.

Con los datos de la figura anterior. Seleccionar a los empleados que no han
efectuado prestamo alguno.
5. Seleccionar los empleados que no han cancelado el prestamo
6. A cuanto asciende el monto de los prestamos efectuados en agosto del 2006?
7. Mostrar los empleados y el monto prestado en setiembre del 2006
8. A cuanto asciende el monto de los prestamos efectuados por los empleados
casados (C)?

Programa Nacional de Informtica 129

www.fullengineeringbook.net
www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 9
Usuarios y privilegios

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Conocer los niveles de privilegios existentes en MySQL
 Crear, conceder y revocar privilegios
 Visualizar los privilegios de los usuarios.
 Crear usuarios para conectarse desde cualquier computador
 Eliminar usuarios.

Hasta ahora hemos usado slo el usuario 'root', que es el administrador, y que dispone de
todos los privilegios disponibles en MySQL.

Sin embargo, normalmente no ser una buena prctica dejar que todos los usuario con
acceso al servidor tengan todos los privilegios. Para conservar la integridad de los datos y
de las estructuras ser conveniente que slo algunos usuarios puedan realizar
determinadas tareas, y que otras, que requieren mayor conocimiento sobre las estructuras
de bases de datos y tablas, slo puedan realizarse por un nmero limitado y controlado de
usuarios.

Los conceptos de usuarios y privilegios estn ntimamente relacionados. No se pueden


crear usuarios sin asignarle al mismo tiempo privilegios. De hecho, la necesidad de crear
usuarios est ligada a la necesidad de limitar las acciones que tales usuarios pueden
llevar a cabo.

MySQL permite definir diferentes usuarios, y adems, asignarle a cada uno determinados
privilegios en distintos niveles o categoras.

Niveles de privilegios
En MySQL existen cinco niveles distintos de privilegios.

Programa Nacional de Informtica 131

www.fullengineeringbook.net
MySQL
Manual del Participante

Globales
Se aplican al conjunto de todas las bases de datos en un servidor. Es el nivel ms
alto de privilegio, en el sentido de que su mbito es el ms general.

De base de datos
Se refieren a bases de datos individuales, y por extensin, a todos los objetos que
contiene cada base de datos.

De tabla
Se aplican a tablas individuales, y por lo tanto, a todas las columnas de esas tabla.

De columna
se aplican a una columna en una tabla concreta.

De rutina
Se aplican a los procedimientos almacenados, los cuales consisten en varias
consultas SQL.

Crear usuarios
Aunque en la versin 5.0.2 de MySQL existe una sentencia para crear usuarios, CREATE
USER, en versiones anteriores se usa exclusivamente la sentencia GRANT para crearlos.

En general es preferible usar GRANT, ya que si se crea un usuario mediante CREATE


USER, posteriormente hay que usar una sentencia GRANT para concederle privilegios.

Usando GRANT podemos crear un usuario y al mismo tiempo concederle tambin los
privilegios que tendr. La sintaxis simplificada que usaremos para GRANT, es la
siguiente.

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...


ON {tbl_name | * | *.* | db_name.*}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...

132

www.fullengineeringbook.net
MySQL
Manual del Participante

La primera parte priv_type [(column_list)] permite definir el tipo de privilegio concedido


para determinadas columnas. La segunda ON {tbl_name | * | *.* | db_name.*}, permite
conceder privilegios en niveles globales, de base de datos o de tablas.

Para crear un usuario sin privilegios usaremos la siguiente sentencia.

Hay que tener en cuenta que la constrasea se debe introducir entre comillas de forma
obligatoria.

Un usuario 'anonimo' podr abrir una sesin MySQL mediante una orden como la
siguiente.

Pero no podr hacer mucho ms, ya que no tiene privilegios. No tendr, por ejemplo,
oportunidad de hacer selecciones de datos, de crear bases de datos o tablas, insertar
datos, etc.

Conceder privilegios
Para que un usuario pueda hacer algo ms que consultar algunas variables del sistema
debe tener algn privilegio. Lo ms simple es conceder el privilegio para seleccionar datos
de una tabla concreta. Esto se hara mediante la misma sentencia GRANT que se usa
para aadir privilegios a un usuario existente.

Programa Nacional de Informtica 133

www.fullengineeringbook.net
MySQL
Manual del Participante

La sentencia de la figura anterior concede al usuario 'anonimo' el privilegio de ejecutar


sentencias SELECT sobre la tabla 'Instructores' de la base de datos 'Gestion'.

Un usuario que abra una sesin y se identifique como 'anonimo' podr ejecutar las
siguiente instrucciones SQL.

Como se puede apreciar en la figura anterior, para este usuario slo existe las base de
datos 'Gestion' y Test, y dentro de la base de datos Gestion solo existe la tabla
'Instructores'.

Adems, podr hacer consultas sobre esa tabla, pero no podr aadir ni modificar datos,
ni por supuesto, crear o destruir tablas ni bases de datos.

Para conceder privilegios globales se usa ON *.*, para indicar que los privilegios se
conceden en todas las tablas de todas las bases de datos.

134

www.fullengineeringbook.net
MySQL
Manual del Participante

Para conceder privilegios en bases de datos se usa ON nombre_db.*, indicando que los
privilegios se conceden sobre todas las tablas de la base de datos 'nombre_db'.

Usando ON nombre_db.nombre_tabla, concedemos privilegios de nivel de tabla para la


tabla y base de datos especificada.

En cuanto a los privilegios de columna, para concederlos se usa la sintaxis tipo_privilegio


(lista_de_columnas), [tipo_privilegio (lista_de_columnas)].

Otros privilegios que se pueden conceder son los siguientes:


ALL: para conceder todos los privilegios.
CREATE: permite crear nuevas tablas.
DELETE: permite usar la sentencia DELETE.
DROP: permite borrar tablas.
INSERT: permite insertar datos en tablas.
UPDATE: permite usar la sentencia UPDATE.

Se pueden conceder varios privilegios en una nica sentencia. Veamos el siguiente


ejemplo.

Un detalle importante es que para crear usuarios se debe tener el privilegio GRANT
OPTION, y que slo se pueden conceder privilegios que se posean.

Revocar privilegios
Para revocar privilegios se usa la sentencia REVOKE. La sintaxis de esta sentencia es la
siguiente.

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...


ON {tbl_name | * | *.* | db_name.*}
FROM user [, user] ...

Programa Nacional de Informtica 135

www.fullengineeringbook.net
MySQL
Manual del Participante

La sintaxis es similar a la de GRANT, por ejemplo, para revocar el privilegio SELECT de


nuestro usuario 'anonimo', usaremos la sentencia REVOKE.

Mostrar los privilegios de un usuario


Podemos ver qu privilegios se han concedido a un usuario mediante la sentencia SHOW
GRANTS. La salida de esta sentencia es una lista de sentencias GRANT que se deben
ejecutar para conceder los privilegios que tiene el usuario. Veamos el siguiente ejemplo.

Nombres de usuarios y contraseas


Como podemos ver por la salida de la sentencia SHOW GRANTS, el nombre de usuario
no se limita a un nombre simple, sino que tiene dos partes. La primera consiste en un
nombre de usuario, en nuestro ejemplo 'anonimo'. La segunda parte, que aparece
separada de la primera por el carcter '@' es un nombre de mquina (host). Este nombre
puede ser bien el de una mquina, por ejemplo, 'localhost' para referirse al computador
local, o cualquier otro nombre, o bien una direccin IP.

La parte de la mquina es opcional, y si como en nuestro caso, no se pone, el usuario


podr conectarse desde cualquier mquina. La salida de SHOW GRANTS lo indica
usando el comodn '%' para el nombre de la mquina.

Si creamos un usuario para una mquina o conjunto de mquinas determinado, ese


usuario no podr conectar desde otras mquinas. Veamos el ejemplo siguiente.
136

www.fullengineeringbook.net
MySQL
Manual del Participante

En el ejemplo anterior, un usuario que se identifique como 'anonimo' slo podr entrar
desde el mismo computador donde se est ejecutando el servidor.

En el siguiente ejemplo, el usuario 'anonimo' slo puede conectarse desde un


computador cuyo IP sea '192.168.1.103'. (ver figura siguiente).

Aunque asignar una contrasea es opcional, por motivos de seguridad es recomendable


asignar siempre una. La contrasea se puede escribir entre comillas simples cuando se
crea un usuario, o se puede usar la salida de la funcin PASSWORD() de forma literal,
para evitar enviar la clave en texto legible.

Si al aadir privilegios se usar una clave diferente en la clusula IDENTIFIED BY,


sencillamente se sustituye la contrasea por la nueva.

Borrar usuarios
Para eliminar usuarios se usa la sentencia DROP USER. Es importanten sealar que no
se puede eliminar un usuario que tenga privilegios. Como se aprecia en el siguiente
ejemplo, al tratar de eliminar al usuario anonimo se genera un error debido a que
anonimo tiene privilegios.

Programa Nacional de Informtica 137

www.fullengineeringbook.net
MySQL
Manual del Participante

138

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Cul es la diferencia entre usuarios y privilegios?


2. Menciones los niveles de privilegios existentes en MySQL
3. Qu acciones podr realizar un usuario que an no tiene privilegios?
4. Cul seria la instruccin para crear y concer privilegios de seleccin, insercin,
actualizacion y eliminacin al usuario psuarez?
5. Cul es la instruccin que permite visualizar los privilegios de los usuarios?
6. Escriba la instruccin que usara para que el usuario labanto pueda conectarse
desde cualquier computador del dominio pni-trujillo
7. Se puede eliminar a un usuario que tiene privilegios?por que?
8. Cules seran las instrucciones para eliminar al usuario psuarez?

Programa Nacional de Informtica 139

www.fullengineeringbook.net
www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 10
Importar y exportar datos

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Comprender la sintaxis para exportar datos
 Exportar datos hacia otros formatos de archivos
 Comprender la sintaxis para importar datos
 Importar datos desde archivos de texto.

MySQL permite copiar tablas en diferentes formatos de texto, as como importar datos a
partir de archivos de texto en diferentes formatos.

Esto se puede usar para exportar los datos de nuestras bases de datos a otras
aplicaciones, o bien para importar datos desde otras fuentes a nuestras tablas. Tambin
se puede usar para hacer copias de seguridad y restaurarlas posteriormente.

Exportar a otros archivos


Para extraer datos desde una base de datos a un archivo se usa la sentencia SELECT ...
INTO OUTFILE.

El resto de las clusulas de SELECT siguen siendo aplicables, la nica diferencia es que
la salida de la seleccin se enva a un archivo en lugar de hacerlo hacia la consola.

La sintaxis de la parte INTO OUTFILE es:

[INTO OUTFILE 'file_name' export_options]

file_name es el nombre del archivo de salida. El archivo no debe existir, ya que en caso
contrario la sentencia fallar.

Programa Nacional de Informtica 141

www.fullengineeringbook.net
MySQL
Manual del Participante

En cuanto a las opciones de exportacin son las mismas que para las clusulas FIELDS y
LINES de LOAD DATA. La sintaxis es la siguiente.

[FIELDS
[TERMINATED BY '\t']
[[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]
]
[LINES
[STARTING BY '']
[TERMINATED BY '\n']
]

Estas clusulas nos permiten crear diferentes formatos de salida.

La clusula FIELDS se refiere a las opciones de cada columna:


TERMINATED BY 'carcter': nos permite elegir el carcter delimitador que se usar
para seleccionar cada columna. Por defecto, el valor que se usa es el tabulador,
pero podemos usar ';', ',', etc.

[OPTIONALLY] ENCLOSED BY 'carcter': sirve para elegir el carcter usado para


entrecomillar cada columna. Por defecto no se entrecomilla ninguna columna, pero
podemos elegir cualquier carcter. Si se aade la palabra OPTIONALLY slo se
entrecomillarn las columnas de texto y fecha.

ESCAPED BY 'carcter': sirve para indicar el carcter que se usar para escapar
aquellos caracteres que pueden dificultar la lectura posterior del archivo. Por
ejemplo, si teminamos las columnas con ',' y no las entrecomillamos, un carcter ','
dentro de una columna de texto se interpretar como un separador de columnas.
Para evitar esto se puede escapar esa coma con otro carcter. Por defecto se usa
el carcter '\'.

La clusula LINES se refiere a las opciones para cada fila.


STARTING BY 'carcter': permite seleccionar el carcter para comenzar cada
lnea. Por defecto no se usa ningn carcter para ello.

TERMINATED BY 'carcter': permite elegir el carcter para terminar cada lnea.


Por defecto es el retorno de lnea, pero se puede usar cualquier otro carcter o
caracteres, por ejemplo '\r\n'.

142

www.fullengineeringbook.net
MySQL
Manual del Participante

Por ejemplo, para obtener un archivo de texto a partir de la tabla 'Instructores', con las
columnas delimitadas por ';', entrecomillando las columnas de texto con '"' y separando
cada fila por la secuencia '\r\n', usaremos la siguiente sentecia. Ver figura siguiente.

Al abrir el archivo de salida con el WordPad, se tiene el siguiente resultado.

Importar Datos
MySQL, tambin, permite el proceso contrario. Podemos leer el contenido de un archivo
de texto en una tabla. El archivo origen puede haber sido creado mediante una sentencia
SELECT ... INTO OUTFILE, o mediante cualquier otro medio.

Para importar datos disponemos de la sentencia LOAD DATA, cuya sintaxis es la


siguiente.

LOAD DATA [LOCAL] INFILE 'file_name.txt'


[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS

Programa Nacional de Informtica 143

www.fullengineeringbook.net
MySQL
Manual del Participante

[TERMINATED BY '\t']
[[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]
]
[LINES
[STARTING BY '']
[TERMINATED BY '\n']
]
[IGNORE number LINES]
[(col_name,...)]

La clusula LOCAL indica, si aparece, que el archivo est en el computador del cliente. Si
no se especifica el archivo de texto se buscar en el servidor, concretamente en el mismo
directorio donde est la base de datos. Esto nos permite importar datos desde nuestro
computador en un sistema en que el servidor de MySQL se encuentra en otra mquina.

Las clusulas REPLACE e IGNORE afectan al modo en que se tratan las filas ledas que
contengan el mismo valor para una clave principal o nica para una fila existente en la
tabla. Si se especifica REPLACE se sustituir la fila actual por la leda. Si se especifica
IGNORE el valor ledo ser ignorado. La parte INTO TABLA tbl_name indica en qu tabla
se insertarn los valores ledos.

No comentaremos mucho sobre las clusulas FIELDS y LINES ya que su significado es el


mismo que vimos para la sentencia SELECT ... INTO OUTFILE. Estas sentencias nos
permiten interpretar correctamente cada fila y cada columna, adaptndonos al formato del
archivo de texto de entrada.

La misma utilidad tiene la clusula IGNORE nmero LINES, que nos permite que las
primeras nmero lneas no se interpreten como datos a importar. Es frecuente que los
archivos de texto que usaremos como fuente de datos contengan algunas cabeceras que
expliquen el contenido del archivo, o que contengan los nombres de cada columna.
Usando esta clusula podemos ignorarlas.

La ltima parte nos permite indicar la columna a la que ser asignada cada una de las
columnas ledas, esto ser til si el orden de las columnas en la tabla no es el mismo que
en el archivo de texto, o si el nmero de columnas es diferente en ambos.

Por ejemplo, supongamos que se desea aadir el contenido del archivo Instructores
Nuevos.txt (ver figura siguiente) a la tabla "Instructores".

144

www.fullengineeringbook.net
MySQL
Manual del Participante

Como se aprecia en la figura anterior, en el archivo hay dos filas al principio que no
contienen datos vlidos, las columnas estn separadas con comas y, como hemos
editado el archivo con el "notepad", las lneas terminan con "\n\r". La sentencia adecuada
para leer los datos es la siguiente.

En la figura anterior se aprecia que agreg a 4 nuevos instructores identificados con los
ID : 5,6,7,8.

Programa Nacional de Informtica 145

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Se puede exportar una tabla de MySQL hacia un formato de MS Accces?


2. Con la ayuda de Internet, buscar Cuales son los formatos que MySQL permite
exportar?
3. Se puede importar datos desde una tabla de MS Excel?
4. Exportar hacia un formato tipo texto las tablas que se muestran a continuacin.

5. Imagine que tiene una archivo de texto con los nuevos prestamos que se han
efectuado a mas intructores (ver figura siguiente) Cul sera la instruccin para
incorparar estos registros a la tabla ctacte de la figura anterior?.

146

www.fullengineeringbook.net
MySQL
Manual del Participante

Capitulo 11
phpMyAdmin

Objetivos
Al finalizar este capitulo, el participante aprender a:
 Conocer que es phpMyAdmin
 Conectarse a phpMyAdmin
 Usar phpMyAdmin para visualizar datos de las diferentes tablas de MySQL
 Administrar las base de datos de un servidor MySQL
 Ejecutar instrucciones SQL
 Realizar copias de seguridad.

El phpMyAdmin es una aplicacin escrita en php que nos permite gestionar las bases de
datos de nuestros sitios Web. Esta aplicacin resulta extremadamente til cuando
necesitamos eliminar alguna tabla o modificar un valor, aunque tambin es cierto que
puede resultar peligroso hacerlo sin tener ningn conocimiento ya que podramos destruir
los datos sin posibilidad de recuperarlos (salvo que se haya creado un backup de la base
de datos).

Cuando se instalo el paquete APPSERV, se instal tambien phpMAdmin, por esa razn
que vamos a abordarlo brevemente.

Para activar el phpMyAdmin solo tiene que hacer click sobre el explorador de Internet e
ingresar la ruta en la cual se encuentra este aplicativo, el mismo que podria ser el
siguiente: http://localhost/phpMyAdmin.php que de inmediato nos mostrar la siguiente
pantalla (ver figura siguiente). En esta ventana inicial el usuario debe ingresar el usuario y
la respectiva contrasea para que podamos ingresar al panel central de phpMyAdmin. En
caso de ingresar una contrasea no vlida el programa nos lo har saber mostrndonos
un mensaje en una etiqueta de color rojo y amarillo.

Programa Nacional de Informtica 147

www.fullengineeringbook.net
MySQL
Manual del Participante

Despus de ingresar el password adecuado, phpMyAdmin, muestra su pantalla principal


para administrar el servidor (ver figura siguiente).

148

www.fullengineeringbook.net
MySQL
Manual del Participante

En la figura anterior se muestra como phpMyAdmin esta compuesto por 2 paneles. En la


parte de la izquierda podrn ver un iframe con la base de datos actual y el nmero de
tablas que contiene, y en la parte de la derecha se aprecia diferentes opciones de
configuracin.

Para seleccionar una base de datos existente, desplegaremos el combo box que se
encuentra en elpanel izquierdo y elegimos la base de datos (ver figura siguiente)

Estructura
Una vez seleccionada, la base de datos, la pantalla principal cambia mostrndose la
estructura completa de nuestra base de datos (Ver figura siguiente).

Programa Nacional de Informtica 149

www.fullengineeringbook.net
MySQL
Manual del Participante

En esta ventana puede observar las tablas que contienen las BD, las acciones que se
pueden realizar sobre las tablas, los registros que contienen, su tipo, tamao y residuo
que se puede depurar (espacio de la base de datos que se est usando para nada y que
se puede eliminar). Las acciones que se pueden realizar son las siguientes.

Examinar: Esta opcin permite ver el contenido de dicha tabla.


Buscar: Permite buscar un valor determinado en la tabla.
Insertar: Permite Inserta datos en la tabla.
Propiedades: Muestra las propiedades de la tabla.
Vaciar: Vaca completamente la tabla.
Eliminar: Elimina toda la tabla incluyendo su estructura.

En la parte inferior de sta pgina, se aprecia un cuadro combinado que contiene


diferentes acciones de trabajo para las tablas seleccionadas a travs de la casilla de
verificacin ubicadas a la izquierda de cada tabla (ver figura siguiente).

Algunas de esta acciones se describen a contnuacin.


Eliminar: Elimina las tablas seleccionadas
Vaciar: Vaca, completamente, el contenido de las tablas seleccionadas
Optimizar la tabla: Elimina el contenido sobrante de las tablas seleccionadas,
liberando espacio no utilizado en nuestra BD. Este procedimiento para optimizar
tablas es la accin ms recomendada.
Reparar tabla: Repara las tablas seleccionadas en caso de que estn daadas.
150

www.fullengineeringbook.net
MySQL
Manual del Participante

Analizar la tabla: Analiza la tabla para comprobar que no hayan errores de ningn
tipo.

Como se pudo apreciar en la imagen anterior, en cada fila que contiene el nombre de la
tabla, hay seis (6) iconos que permiten realizar diversas acciones. Entre estas acciones

encontramos, en primer lugar, al icono Examinar . Al hacer click sobre este icono
aparece la ventana Examinar mostrndonos todo el contenido de la tabla seleccionada
(ver figura siguiente).

A travs de esta ventana se puede editar los valores (por medio del icono del lpiz) o
borrar un registro (con la X roja). Cuando hay demasiados registros, se visualiza el
contenido en varias pginas, en las que se puede avanzar o retroceder.

SQL
Al hacer click sobreesta pestaa se muestra una ventana en la que se puede introducir
instrucciones MySQL consistentes en varias lneas de texto o una backup para restaurar
tu BD (Ver figura seguiente).

Programa Nacional de Informtica 151

www.fullengineeringbook.net
MySQL
Manual del Participante

Importante
Sobre la consulta SQL, es recomendable no incluir demasiadas lneas.
Si la base de datos fuera excesivamente grande, sera preferible fragmentar el backup en
varios segmentos.

Exportar
Ahora observemos la pestaa exportar, que tambin resulta de extrema utilidad (sobre
todo para crear backups de nuestra BD). La ventana de la ficha exportar se muestra en la
siguiente figura.

La ventana Exportar permite realizar backups de toda la base de datos o solo de algunas
tablas de nuestra eleccin. Para ello, solo hay que seleccionar las tablas en forma
discontinua.

152

www.fullengineeringbook.net
MySQL
Manual del Participante

Para realizar una backup de la base de datos, hay que seguir los siguientes pasos.

1. Debajo del cuadro Exportar donde aparecen las tablas, hacer click en Seleccione
todo.
2. Revise que estn marcados las opciones Estructura y Datos (es recomendable
marcar tambin Aadir DROP TABLE)
3. Marcar Enviar (genera un archivo descargable) y pulsar el botn Contine para
generar el backup de la base de datos.

Programa Nacional de Informtica 153

www.fullengineeringbook.net
MySQL
Manual del Participante

Preguntas de Repaso

1. Qu es phpMyAdmin?
2. Cmo se consigue phpMyAdmin?
3. El usuario que uso para conectarse a MySQL mediante la consola se puede
utilizar para conectarse con phpMyAdmin?
4. Usted cree que usar phpMyAdmin es ms fcil que usar la consola?por que?
5. Qu instrucciones SQL se puede ejecutar en phpMyAdmin?
6. En phpMyAdmin, Exportar es lo mismo hacer un backup? Verifique
7. Usando phpMyAdmin y las tablas del captulo anterior (empleados y ctacte)
ejecutar las siguiente tareas:
a. Crear un backup comprimido con ZIP.
b. Eliminar las tablas empleados y ctacte
c. Restaurar el backup creado en el item a)

154

www.fullengineeringbook.net

También podría gustarte