You are on page 1of 86

Introduccin

Sean bienvenidos y bienvenidas al mundo de los motores de las bases de datos, uno de los
pilares de las ciencias informticas, por qu?, pues porque en la gran mayora de las
ocasiones, los datos que utilizamos o insertamos o modificamos o borramos, necesitan estar
"guardados" en algn lugar. Un ejemplo?, claro, los juegos de vdeo,... no lo creen?,
cmo creen entonces que guardan las puntuaciones ms altas, los nombres de los jugadores,
etc., etc.
Las bases de datos estn por todos lados a nivel informtico, estn cuando pasan un cdigo
de barra por la lectora de cdigos en el supermercado; estn en nuestros carns de
empleado que retienen nuestra informacin gracias a un nmero de empleado o un cdigo
de barra; estn en internet cuando entramos a comprar algo en lnea; estn en el
departamento de trnsito cuando debemos pagar una multa (dolor, dolor, muchsimo dolor).
Este curso es sobre uno de los motores de bases de datos ms famosos, lase MySQL. Una
de las razones de dicha fama, es el hecho de que es de cdigo abierto bajo licencia GNU.
Dicho en palabras mortales: es GRATIS (de fondo deben escucharse aplausos y gritos de
aleluya, por favor)
MySQL es un software creado por MySQL AB y es un software multiusuario, multihilos y
un servidor SQL (Structured Query Language). SQL es el lenguaje estndar utilizado para
manejar las bases de datos, mismo que tambin aprenderemos en este curso.
En fin, dicho lo anterior, empecemos por decir que MySQL puede ser bajado de la
direccin www.mysql.com. Una "gua" completa de bajado e instalacin son las siguiente
imgenes:

Las imgenes anteriores nos dicen el sitio en el que buscar, el apartado del sitio en el que
debemos buscar, el tipo de instalador que debemos buscar (en nuestro ejemplo hemos
buscado el instalador para el sistema operativo Windows), de donde sacaremos los archivos
para instalar, el archivo al que debemos acceder para iniciar la instalacin y la forma de
iniciar nuestra sesin en MySQL como usuario raz o ROOT.
Despus de lo anterior, nos resta decir que a partir de nuestra prxima entrega, empezamos
a ver a fondo lo que son realmente las bases de datos.
Las Bases de datos

En fin, el modelo de redes poda tener registros, en los cuales se alojaran otra cantidad de
registros, y dichos registros podan pertenecer a ms de un conjunto. Sin embargo, el
problema de este modelo consista en la dificultad de la aplicacin de bsquedas o
modificaciones. Era necesario ser un cuasi ingeniero informtico para poder hacer una
bsqueda.
Posteriormente, aparecieron las bases de datos relacionales, en las cuales los datos se
relacionaban unos a otros con base en tablas y pequeos vnculos que servan de puente
conector entre una tabla y otra, logrando de esta manera la "descomposicin" de la
informacin en partes, con la posibilidad de reconstruir dicha informacin y presentarla con
todos los agregados respectivos.
De esta forma resumimos (por favor puristas de la informtica, no se revuelvan en sus
tumbas) la historia de las bases de datos, y podemos decir que estamos listos para iniciar la
explicacin de lo que implica construir una base de datos del tipo relacional. Pero eso ser,
como seguramente ya lo habrn adivinado, en la prxima entrega. Hasta Pronto.

Las bases de datos relacionales


Muy bien, hablemos un poco sobre las bases de datos relacionales en esta ocasin. Las
bases de datos relacionales, como ya explicamos en nuestro encuentro anterior las bases de
datos relacionales tienen la ventaja de "relacionarse" entre s sin la necesidad de duplicar
una gran cantidad de informacin, con base a un lenguaje estndar llamado SQL
(Structured Query Language), el cual es, podramos decir, la razn para que las bases de
datos relacionales tengan un xito tan arrollador.
De tal manera, las bases de datos relacionales utilizan "punteros disfrazados" para poder
tener relacin entre ellas (para los que conocen un poquitn de C o C++, esto de los
punteros debe sonar como oir llover), ahora bien, esto de los punteros y de las relaciones, a
nivel SQL se conoce en realidad como llaves o keys.
Pero no nos adelantemos, expliquemos cmo se compone una base de datos (de ahora en
adelante, una base de datos relacional, ser simplemente la base de datos o la base, pues,

para abreviar). Podramos pensar en las bases de datos como en cajas, dentro de las cuales
hay celdas, cada una guardando algo.

Bien, las bases de datos estn conformadas por TABLAS, que son las contenedoras de la
informacin. Es decir, la base de datos sera el cuarto conteniendo las cajas (que seran las
tablas). Las tablas contienen campos, formados por filas y columnas.
Imaginemos una tabla dentro de una base que contenga dos columnas: Nombre y Apellido.
Las columnas representan la informacin genrica de la tabla, que es en donde se guardar
la informacin especfica, es decir, en las filas.
As pues, si tenemos un par de datos que guardar, es decir un nombre y un apellido,
digamos: Ernesto Chvez; estos datos formaran una fila, pues corresponden a una persona
especfica, sin embargo, Ernesto se guardara en la columna Nombre y Chvez se guardara
en la columna apellido.
De esta manera, las tablas mantienen comunicacin entre columnas, para extraer la
informacin especfica de las filas.
Pero tambin hay comunicacin entre tablas (incluso entre bases de datos). Sin embargo,
esto, lo aclararemos en nuestra siguiente entrega. Hasta Pronto.

Las bases de datos relacionales 2

Dicen por ah que no hay nada ms importante que la comunicacin y en cuestin de bases
de datos, esto es, en definitiva, un axioma. Ya hablamos de la comunicacin entre columnas
dentro de una misma tabla, que a su vez est contenida dentro de una base de datos. Ahora
bien, hablemos de la comunicacin entre tablas dentro de una misma base de datos.
Como seguramente recordarn, hemos hablado ya de las llaves. Las llaves no son ms que,
para los que saben de C y C++, punteros que, de una tabla, apuntan a otra, teniendo en
cuenta un dato comn. Dicho en buen cristiano, y explicado con un ejemplo prctico:
Nos han puesto una multa por manejar a excesiva velocidad (nuestra bicicleta iba a 15 en
una zona de 7.5 pues nuestra novia nos pidi flores y tuvimos que ir a comprarlas con
rapidez) y vamos a pagar dicha multa a las oficinas respectivas. Al llegar a las oficinas,
amn claro del clima de culpabilidad, vemos que todo el mundo tiene su licencia en la
mano, la cual entregamos a la amabilsima secretaria de la ventanilla; la secretaria toma
nuestra licencia de conducir, mira los nmeros y digita en la computadora los nmeros que
corresponden al nmero de nuestra licencia. La computadora, despus de algn tiempo,
muestra en pantalla la informacin sobre la persona poseedora de la licencia, es decir,
nosotros. Hasta este punto, podramos asumir que la computadora ha puesto en marcha una
consulta a una sola tabla, es decir, la tabla que contiene nuestros datos personales, sin
embargo, qu ocurre cuando la siempre sonriente secretaria procesa el pago de nuestra
multa? Las multas deberan ser guardadas en otra tabla, para evitar que la informacin se
mezcle y se haga una cantidad innecesaria de informacin; as pues, el pago de la multa se
procesa en otra tabla, pero, de alguna manera debe estar vinculada a nuestra informacin,
sino, habra un verdadero desastre de informacin en las oficinas de trnsito, cmo
imaginan ustedes que dicho vnculo podra llevarse a cabo? Veamos las opciones:

- El nombre de la persona
- El apellido de la persona
- El nmero de su licencia

Si escogisemos el nombre habra un problema, cuntas personas existiran con el mismo


nombre; la misma historia pasara si escogisemos el apellido; por otro lado, escogiendo el
nmero de licencia (que es nico) podramos establecer un vnculo entre la tabla de
nombre, digamos datos_generales, y la tabla de nombre pagos_efectuados. Dicho en
trminos de bases de datos, la llave entre una tabla y otra sera una columna que contenga el
nmero de licencia, y que debera existir tanto en la tabla datos_generales, como en la
tabla pagos_efectuados, de tal forma que nuestro motor de bases de datos sepa que el pago
efectuado por una persona, pertenece exclusivamente a un nmero de licencia, que a su vez,
corresponde a una persona con un nombre y un apellido especfico.
Por cierto:

Esta es nuestra bicicleta con las flores

Y esta es la siempre sonriente oficinista


Muy bien, hemos cubierto de manera extremadamente global lo que implican las bases de
datos relacionales y la forma en la que unas mantienen comunicacin con otras. En nuestro
siguiente encuentro, empezaremos a conocer el Lenguaje Estructurado de Consultas SQL
(Structures Query Language). Por el momento, recuerden: Un pintor es un hombre que
pinta lo que vende, un artista es un hombre que vende lo que pinta (Pablo Picasso) Seamos
artistas de nuestros programas, no pintores de los mismos. Hasta Pronto.

Lenguaje SQL
Hola de Nuevo, damas y caballeros. En esta nuestra nueva entrega, siendo que lo prometido
es deuda, empezamos los pormenores, tanto de SQL como de MySQL en especfico.
SQL es una lenguaje de alto nivel, lo que entre otras cosas, quiere decir que es un lenguaje
que, para los mortales (nosotros) es mucho ms sencillo de comprender que los lenguajes
de bajo o de medio nivel (como Ensamblador o C respectivamente).

Por ejemplo, para decirle a SQL (o en nuestro caso a MySQL a travs de SQL) que muestre
los datos en una tabla especfica le decimos:
SELECT * FROM Nombre_de_tabla;
Para el que sepa un poquitn de ingls o para el que tenga un diccionario espaol-ingls,
ingls-espaol a la mano, ser ms que sencillo comprender las generalidades de la
sentencia anterior.
Pero bueno, antes vender el cuero, sin antes haber matado al tigre
No hay nada como MOSTRAR (y si no lo creen pregntenle a las bailarinas o bailarines
strippers) y en MySQL eso es sencillo con la sentencia SHOW.
La sentencia SHOW tiene una sintaxis sencilla y en nuestro ejemplo siguiente, lo
utilizamos en tres diferentes formas:

SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM nombre_de_tabla;

Lo que hacen estas sentencias es, en su respectivo orden:


Muestra
las
bases
de
datos
que
estn
guardadas
en
MySQL
Muestra
las
tablas
contenidas
en
una
base
de
datos
especfica.
Muestra las columnas contenidas en una tabla especfica.
Ahora bien, para ver las tablas contenidas en una base, necesitamos primero que nada,
decirle a MySQL que deseamos utilizar o USAR dicha base, lo cual hacemos por medio de
la palabra reservada USE, de la siguiente forma:
USE nombre_base_de_datos;
Ahora s, ya podemos ver las tablas que contiene la base de datos que especificamos,
utilizando la instruccin que ya les explicamos SHOW TABLES.
Pero bueno, veamos un ejemplo prctico, con un vdeo, les parece?

En nuestra siguiente entrega vamos a aprender la forma en la que creamos una base de
datos en MySQL, por el momento: Hasta Pronto.

Lenguaje SQL parte 2


Holaaaaa. Cmo estn? Esperamos que de lo mejor.

En este nuevo encuentro, aprenderemos a crear bases de datos y a borrarlas en caso de ser
necesario. Vaya, por fin nos hemos dignado a mostrar como crear bases de datos! Lo
sabemos, nos hemos tomado nuestro tiempo, pero con todo y eso, tenamos la necesidad de
contar un tantito de historia y de la forma en la que las bases de datos trabajan.

En fin, comencemos:

Las bases de datos, como ya explicamos con anterioridad, son colecciones de tablas, que a
su vez son colecciones de columnas y de filas, que son, a su vez, colecciones de datos, tanto
punteros disfrazados (columnas), como la informacin a la que apuntan los punteros (las

filas y perdn por la redundancia). Pero antes de crear tablas, columnas y filas, necesitamos
crear el CONTENEDOR de esta informacin, es decir, la gran y venerada Base de Datos.

Para crear la base de datos, basta con utilizar la sentencia SQL

CREATE DATABASE nombre_base;

Y eso es todo, es as de fcil?, si es usted (si usted) de las personas que gustan de
presumirle a las amistades de lo mucho que sabe, y quera presumir sobre sus
conocimientos nicos de crear bases de datos, dada la dificultad que representa, lo
sentimos, su objetivo no se cumplir.

Efectivamente, la creacin de la base de datos es as de sencilla, pero, qu pasara si el


nombre de la tabla ya existe, sencillo, MySQL producira un error 1007, si, un feo (y
ruidoso pues produce un efecto sonoro en el altavoz de la computadora) error. Cmo
evitamos este error, sencillo, agregamos a nuestra sentencia lo siguiente:

CREATE DATABASE IF NOT EXISTS nombre_base;

Esto no hace que la base de datos que estamos creando sobreescriba que la que ya existe,
sino que simplemente evitamos que MySQL nos de ese error. Si lo que se estn
preguntando es y qu ganamos con eso?, pues bien, en realidad es una cuestin de forma.
Supongamos que tenemos una aplicacin que utiliza nuestro motor de base de datos,
digamos PHP y a la hora de utilizar la aplicacin tenemos la necesidad de crear una base de
datos en tiempo real, esto nos producira un error en nuestra pantalla, el cual se desplegara
en nuestro navegador de Internet, lo cual sera desastroso para nuestra aplicacin.

Por otro lado, en ocasiones es necesario deshacernos de algunas bases de datos que han
convertido en obsoletas o, tal vez duplicadas, en este caso, lo que hacemos para borrar
dichas bases de datos es lo siguiente:

DROP DATABASE nombre_tabla;

As de sencillo es tanto crear como borrar bases de datos. Pero como dicen, para muestra un
botn, vean el siguiente vdeo:

Delicioso, no es as?, muy bien damas y caballeros, en la prxima leccin aprenderemos


cmo crear tablas, las cuales, como perfectamente sabemos, estn contenidas dentro de las
bases de datos. Por el momento, recuerden jams darle la razn a Samuel Johnson quien
dijo que Todo hombre es, o confa llegar a ser un holgazn Nosotros, con toda seguridad,
le desmentiremos siempre. Hasta Pronto

Creando tablas
Lo que necesitamos hacer es utilizar la sentencia SQL que nos permite crear tablas, siempre
y cuando tengamos una base de datos que la contenga, es decir:

CREATE TABLE nombre_tabla (campo1 tipo(longitud), campo2 tipo(longitud),


campo_n tipo(longitud));

Debemos recordar que, antes de utilizar esta sentencia, debemos seleccionar una base de
datos, que ser la que contendr a la tabla que vamos a crear, la forma de hacerlos es, como
seguramente recordarn, utilizando USE nombre_base_de_datos; para posteriormente crear
la tabla.

En caso de que la tabla ya no nos sea de utilidad, podemos deshacernos de ella utilizando la
sentencia DROP TABLE nombre_de_tabla; la cual borra por completo la tabla indicada.

En fin, dadas todas las explicaciones, vean un ejemplo prctico de cmo se crean las bases
de datos:

Antes de finalizar con esta leccin, debemos hacer una aclaracin, en el vdeo mostrado,
despus de la sentencia CREATE TABLE uno(, hemos presionado la tecla ENTER o
INTRO simple y sencillamente para hacer ms comprensible las columnas que han de
integrar dicha tabla, sin embargo, la tabla pudo haberse creado sin la necesidad de presionar

la tecla ENTER o INTRO, teniendo una sola lnea de cdigo (o ms de una dada la longitud
de la sentencia)

Bien, ya sabemos como crear tablas dentro de una base de datos, pero antes de aprender a
llenar los espacios en las tablas, debemos saber los tipos de datos que podemos insertar
en las tablas y sus secretitos. Dicho esto, los dejamos pensando en esa parte del vdeo en
la cual, despus del nombre de la columnas, hemos escrito cuatro letras: char y un nmero.

Recuerden siempre, por favor, lo que dice Ernesto Sbato: Las modas son legtimas en las
cosas menores, como el vestido. En el pensamiento y en el arte son abominables Nunca,
jams de los jamases, permitamos que nuestro arte o nuestro pensamiento estn a la moda
Hasta Pronto.

Tipos de datos
Estamos juntos de nuevo y les damos la bienvenida.
En la ltima leccin creamos una tabla de nombre UNO, contenida en una base de datos de
nombre PERSONAS. Sin embargo, hubo algo que no explicamos, y es que debemos decirle
a MySQL el tipo de datos que almacenar la columna que estamos creando dentro de la
tabla.
Los tipos de datos que puede permitirnos MySQL es muy variada y se los referimos a
continuacin:
CHAR/CHAR(): Las columnas de tipo char o char() almacenan un carcter o una cadena
de caracteres de 0 hasta 255 respectivamente (Si lo recuerdan, este fue el tipo de datos que
le asignamos a todas nuestras columnas en la tabla UNO)

VARCHAR: Estas columnas almacenan una cadena de caracteres variables de 0 a 255.

TINYINT(): Almacena un valor entero pequeo de 0 a 255 o de -128 a 127

BIT
BOOL
BOOLEAN: Todos estos tipos son sinnimos de TINYINT(1).

SMALLINT: Almacena un entero corto (digamos que, no tan pequeo), entre -32768 y
32767 o, en caso de no tener un signo de 0 a 65535.

MEDIUMINT: Almacena un entero de tamao medio entre -83888608 y 8388607 y entre


0 y 16777215 sin signo.

INT/INTEGER: Contiene un entero de tamao normal (este normal es para nosotros en


realidad un tamaote) entre -2147483648 y 2147483647 o entre 0 y 4294967295.

BIGINT: Como podrn imaginarse contiene un entero grande (o lo que es lo mismo un


enterote) entre -9223372036854775808 a 922337203685477807 con signo o de 0 a
18446744073709551615 sin signo.

FLOAT/FLOAT(): Guarda un nmero de coma flotante. Opcionalmente puede


acompaarse (al tipo flota sin los parntesis) de la palabra precisin que le indica la
precisin decimal que se desea, que puede llegar hasta 24 para precisin sencilla y de 25 a
53 para una precisin doble. Para flota(), los valores permitidos van desde
-3402823466E+38 y -1.175494351E-38, 0, y entre 1.175494351E+38 y 3.402823466E+38.
En caso de espcificarse el modificador UNSIGNED los valores negativos no son
permitidos.

DOUBLE: Contiene un nmero de coma flotante de precisin normal. Sus valores van
desde -1.7976931348623157E+308 y -2.2250738585072014E-308, 0, y entre
2.2250738585072014E-308 y 1.7976931348623157E+308. Una vez ms, si se define
UNSIGNED, los valores negativos no son permitidos.

DOUBLE PRECISIN
REAL : Son sinnimos de DOUBLE

DECIMAL: Guarda un nmero de coma flotante sin empaquetar. Esto de sin empaquetar
implica que se guarda como una cadena (vase CHAR), usando un carcter para dgito del
valor.

DEC
NUMERIC
FIXED : Son todos sinnimos de DECIMAL

DATE: Almacena un valor de fecha, los rangos permitidos son desde 1000-01-01 y
9999-12-31 (Fecha en la que podra que nosotros ya no estemos vivos). El formato de
fecha presentado es, como ya lo habrn imaginado AAAA-MM-DD

DATETIME: Contiene un MIX (para demostrar que sabemos de terminologa moderna),


es decir una mezcla de fecha y hora. El rango que MySQL soporta es desde 1000-01-01
00:00:00 hasta 9999-12-31 23:59:59. El formato es del tipo AAAA-MM-DD
HH:MM:SS

TIMESTAMP: Es un valor de tiempo que puede estar desde -1970-01-01 00:00:00 hasta
un momento en el ao 2037 (lo cual suena como a un libro de ciencia ficcin o algo as, no
les parece?)

TIME: Es una hora que permite los valores -838:59:59 a 838:59:59. Los valores se
muestran en formato HH:MM:SS

YEAR: Guarda un ao en formato de 2 o 4 dgitos, siendo el valor por defecto 4. Los


valores permitidos son desde 1901 a 2155 y 0000 en el formato de 4 dgitos y desde 1970 a
2069 en el formato de 2 dgitos (70-69).

Los siguientes tipos son para datos sin tipo o grandes cantidades de datos.

TINYBLOB
TINYTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 255
caracteres (28-1)

BLOX
TEXT: Almacena una columna BLOB o TEXT con una longitud de hasta 65535 caracteres
(216-1)

MEDIUMBLOB
MEDIUMTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta
16777215 caracteres (224-1)

LONGBLOB
LONGTEXT: Almacena una columna BLOB o TEXT con una longitud de hasta
4294967298 caracteres (232-1)

Los siguientes son los tipos enumerados y los conjuntos:

ENUM: Almacena un enumerado, el cual es un objeto cadena que pueden un valor de entre
una lista, el valor NULL o el valor de error . Este valor puede tener un mximo de 65535
valores diferentes.

SET: Almacena un conjunto. Es una cadena que puede tener 0 ms valores. Todos esos
valores debe estar entre una lista de valores. El mximo de miembros de un conjunto puede
ser 64.

Muy bien, esta ha sido una mirada rpida (QUEEEEE, ESTO ES RPIDO?) a los tipos de
MySQL. Hay que aclarar que una vez se define una columna como almacenadora de un
tipo, no habremos de intentar guardar valores de un tipo diferente dentro de ellas. OJO y
mucho cuidado en esto.

Esta, los sabemos, ha sido una leccin larga, pero necesaria, as que, sin ms ni ms, Hasta
Pronto.

Insertar datos
Hola, sean bienvenidos a esta reunin.
La garanta de que nuestras bases de datos estn funcionando como Dios manda, es que
haya datos que se estn insertando constantemente.

En esta nueva leccin, vamos a aprender como insertar datos en MySQL. Tal y como vimos
en nuestra leccin anterior, debemos tener siempre en cuenta que los tipos de datos que
vamos a almacenar en nuestras columnas sean el tipo de datos que hemos definido a la hora
de crear nuestra tabla.

Dicho lo anterior, podemos empezar. La insercin en MySQL (basados en el lenguaje SQL,


claro est) se hace por medio de la sentencia INSERT INTO , cuya sintaxis bsica es:
INSERT
INTO
nombre_tabla
(columna_1,
columna_2,
VALUES(valor_1, valor_2, valor_n) WHERE condicin(opcional)

columna_n)

INSERT INTO es, obviamente, la sentencia SQL que inserta los valores en una tabla.

nombre_tabla es el nombre de la tabla en donde los valores sern insertados.

(columna_1, columna_2, columna_n) especifica las columnas en la que los datos se


insertarn.

VALUES es la palabra que avisa a MySQL que los datos a continuacin son los que se
insertarn.

(valor_1, valor_2, valor_n) son los datos que habrn de insertarse. Las comas separan
los datos dependiendo de la columna a la que pertenecen (el orden lo especificamos en
(columna_1, columna_2, columna_n)

WHERE condicion especifica una condicin a cumplirse para que la insercin se lleve a
cabo.

Una palabra sobre las condiciones antes de ver nuestro vdeo. Las condiciones que le
hemos de poner a nuestras inserciones dependern exclusivamente de nuestras necesidades,
por ejemplo, si necesitamos que la columna nombre se grabe nica y exclusivamente si
cumple con la condicin que sea Pancracio, entonces nuestra condicin sera WHERE
nombre = Pancracio Como ya lo dijimos, la condicin WHERE es opcional y puede no
incluirse en nuestras sentencias INSERT INTO, en caso de no ser insertadas, los datos se
insertarn sin importar nada (o casi nada).

Muy bien, hemos visto los principal en cuanto a inserciones se refiere, para que vean un
poquitn de prctica, los dejamos con el siguiente vdeo:

Antes de finalizar este nuestro encuentro, hay que decir algo sobre nuestro vdeo. Como
vimos al principio (de hecho hace un par de lecciones), la creacin de una tabla de nombre
UNO en la que definimos cuatro columnas:

nombre:
que
almacenara
una
cadena
de
caracteres
apellido:
que
almacenara
una
cadena
de
caracteres
telfono:
que
almacenara
una
cadena
de
caracteres
direccin: que almacenara una cadena de caracteres de hasta 45

de
de
de

hasta
hasta
hasta

15
15
10

Las inserciones de nuestro ejemplo van bien y sin problemas, hasta que insertamos la
columna direccin (que conste no es un error ortogrfico, el nombre de la columna es
direccin sin tilde). Como seguramente habrn notado, la direccin que intentamos insertar
es de ms de 45 caracteres. Qu ocurri? Sencillo, MySQL tiene una definicin de una
columna y respetar esa decisin hasta el final (no sera genial que algunos personajes de
la vida pblica hiciesen lo mismo?), cualquier intento de insertar ms caracteres de los

especificados resultar en el truncado de todos los caracteres que se sobrepasen la longitud


definida para la columna.

Esto es todo lo que respecta a las inserciones (por el momento), en nuestra siguiente tertulia
aprenderemos a SELECCIONAR los datos. De momento, no se les olvide que, como dijo
Florence Nightingale: Lo importante no es lo que nos hace el destino, sino lo que nosotros
hacemos de l Hagamos de nuestro destino una sucesin de eventos memorables, siempre.
Hasta Pronto.

Seleccionar datos
SELECCIONAR o no SELECCIONAR, esa es la cuestin.
Hola, cmo les va?

Tal y como lo prometimos, en esta leccin aprenderemos a seleccionar los datos que hemos
insertado en una tabla, contenida en una base de datos. La actividad selectiva es,
probablemente, una de las actividades que ms se llevan a cabo en el trabajo con las bases
de datos. Tiene sentido si lo analizamos con cabeza fra: Nosotros llegamos a un
supermercado, tomamos todos los productos que vamos a llevar, los llevamos a la caja y la
cajera empieza a pasar cada producto por la lectora de cdigo de barras, e inmediatamente
la computadora o la caja registradora sabe perfectamente el producto que estamos llevando
y su precio.

Pregunta del milln, qu proceso est llevando a cabo la computadora o caja registradora?
Cooooooooorrrrrrrectoooooooooo, est seleccionando datos a partir de un cdigo, a saber:
El cdigo de barras.

Antes de continuar con nuestra explicacin del proceso de seleccionar, recordemos por
favor que, una prctica necesaria para trabajar con bases de datos relacionales, es la de
crear una llave o cdigo comn en las tablas que han de tener relacin. Para el ejemplo que
estamos presentando, obviamente la llave o cdigo debe ser el cdigo de barras. Otra
pregunta, podramos almacenar la descripcin del producto junto con el cdigo de barras y
su precio? Bien la respuesta es, se puede, pero no se debe, la razn?, pues es algo que se
llama normalizacin de una tabla, y es algo que tiene que ver, por decirlo de alguna
forma, con la agrupacin de los elementos ms comunes a los datos que guardamos en una

tabla. Hay algo ms cambiante que un precio? La triste respuesta es NO, por consiguiente,
lo ms recomendable sera tener el precio en otra tabla.

En fin, continuemos. Para llevar a cabo un proceso selectivo debemos utilizar la sentencia
SQL SELECT, la cual tiene la siguiente sintaxis bsica:

SELECT nombre_columna FROM nombre_tabla WHERE condicion (opcional) GROUP


BY orden_de_agrupacion ORDER BY orden_de_ordenamiento.

Tomando el ejemplo de la caja registradora, supongamos que el cdigo de barra lanza el


siguiente cdigo 0245f0124n01214, la sentencia SELECT que podra llevarse a cabo en
el CPU de la computadora es:

SELECT precio, nombre_producto FROM productos WHERE codigo_barras =


0245f0124n01214;

Claro est, esta es una suposicin bastante global, pero podra estar muy acertada.

En fin, veamos en accin a la sentencia SELECT, les parece?

Antes de finalizar nuestro encuentro, aclaremos un par cosillas del vdeo:


- La condicin WHERE de la primera sentencia, le dice a MySQL que seleccione la
columna nombre, perteneciente a la tabla uno en DONDE el apellido sea
FORZOSAMENTE Chavez.
- La segunda sentencia utiliza el carcter comodn asterisco (*), el cual le dice a MySQL
que seleccione TODAS las columnas del tabla uno, en donde se cumpla la condicin (y
siendo que no hay condicin alguna, la sentencia selecciona literalmente a todas las
columnas sin excepcin alguna)

A lo largo de nuestro curso aprenderemos a utilizar la sentencia SELECT con un poco ms


de detalle, por el momento, con esta leve degustacin ya tienen para hacer algunas cosas
entretenidas.

En nuestra siguiente leccin aprenderemos a MODIFICAR o ACTUALIZAR los datos de


una tabla. Por el momento recuerden: Si das pescado a un hombre, lo nutres por una

jornada. Si le enseas a pescar, le nutrirs toda la vida (Lao Ts) Recuerden amigos, esto,
es slo la forma en la que tenemos que pescar.

Modificar datos
No hay nada como saberse vivo. Y una muestra clara de que estamos vivos es,
precisamente, el hecho de estar juntos una vez ms en esta leccin, ocasin por dems
fabulosa para celebrar la vida.

Las modificaciones, as como las adiciones y el borrado, representan la columna vertebral


de la evolucin constante de una base de datos. El modificado de una base de datos nos da
la seguridad de tener los datos correctos, o los datos realmente tiles, almacenados en
nuestra base de datos.

Un ejemplo de la importancia de la actualizacin de las bases de datos es, por ejemplo, la


actualizacin de los precios de los productos en venta en un supermercado (claro, a todos
nos encantara que dicha actualizacin fuese para bajar precios en lugar de para subirlos)
En el caso del supermercado, la actualizacin es una de las tareas ms importantes en la
vida de sus bases de datos. Cmo se sentiran ustedes si fuesen propietarios de un
supermercado, y al registrar sus ventas, los precios de los productos estuviesen registrados
con los precios de hace cinco aos?

Exacto, esa misma sera su cara. Por tanto, las actualizaciones son una parte vital de una
buena y sana base de datos.

Para MySQL las actualizaciones se llevan a cabo mediante la sentencia UPDATE, cuya
sintaxis es la siguiente:

UPDATE nombre_base/nombre_tabla SET columna_1 = expresion1, columna_2 =


expresion2, columna_n = expresin WHERE condicion.

Antes de ver en accin la sentencia UPDATE, permtannos una observacin de vital


importancia. Como se darn cuenta, en todas, o en la gran mayora de las sentencias en
MySQL existe la posibilidad de utilizar la condicionante WHERE. Esta condicin es en
realidad una de las sentencias ms importantes a nivel de las bases de datos relacionales, ya
que es la que le impone condiciones a nuestro Modificado, Borrado o Seleccionado,
evitando de esta forma el que datos importantes (o no importantes en algunos casos) sean
Modificados, Borrados o Seleccionados. La sentencia WHERE tiene tanto (o ms
protagonismo) que la sentencia que la utiliza. As pues queridos amigos, por favor,
entiendan a la perfeccin el uso de la sentencia WHERE.

Bien, conforme avancemos en el curso, iremos viendo los usos y necesarias utilizaciones de
la sentencia WHERE

Esta es la sentencia de modificacin en accin. Esperamos que les sirve de mucho lo que
hemos aprendido. En nuestra prxima leccin vamos a aprender cmo se BORRAN los

datos. Por el momento, recuerden siempre lo que dijo Robert Louis Stevenson: "El encanto
es la virtud sin la cual todas las dems son intiles" Recordemos siempre que nuestras
pasiones deben tener la virtud del encanto, de lo contrario, las pasiones,... se convierten en
obligaciones.

Borrado de datos
Hola, que bueno tenerlos de regreso!
Se imaginan lo que podra pasar si un registro de votantes no sacase a las personas que van
muriendo ao con ao? Claro est, la base de datos podra colapsar en un determinado
momento debido a la cantidad enorme de datos que se guardaran en ella.

Y, cul creen ustedes que es el proceso que debe llevarse a cabo para hacer esa limpieza
de personas? As es: es el BORRADO.

Una de las recomendaciones de ley es simplemente hacer hincapi en el hecho de que el


borrado es una operacin por dems delicada y que, debemos poner todos los mtodos de
prevencin para evitar que el usuario borre accidentalmente los datos que NO deberan ser
sacados de la base.

Hecha la advertencia anterior, veamos la sintaxis de la sentencia DELETE, que por cierto
es la encargada de borrar los datos de la base:

DELETE FROM nombre_tabla WHERE condicion


Observacin importante: Si omitimos la condicin WHERE el contenido TOTAL de la
tabla se borrar:

DELETE FROM uno;


La sentencia de arriba hace que la totalidad del contenido de la tabla uno se borre, de tal
suerte que si luego hacemos una consulta como:

SELECT * FROM uno;


El resultado sera el siguiente:

En caso de que necesitemos poner algunos obstculos en el camino del usuario para
evitar que los datos sean borrados a troche y moche. Algunas opciones podran ser un
subformulario en JavaScript o una simple pgina intermedia de PHP que le pregunte al
usuario un nombre de usuario y/o una contrasea para poder hacer el borrado de tal o cual
dato (no saben de PHP?, heeeeeey, hay dos cursos gratis aqu en aulafacil.com, no hay
razones para preocuparse)
Ustedes perdonarn la insistencia patolgica en el cuidado al borrar datos, pero crannos, es
un verdadero calvario encontrarse con datos borrados por accidente, todo gracias a que no
supimos poner un filtro para nuestro querido usuario.
Bueno, despus de haberle pedido al usuario hasta el acta de defuncin para poder borrar
algo, veamos a nivel de MySQL lo que ocurre, les parece?

Bien ladies and gentlemen he aqu el destructivo poder de DELETE. Por lo tanto, usadlo
con sabidura. Hasta Pronto

Seleccin inexacta
No les ha ocurrido que de cuando en cuando no estn seguros de si un nombre se escribe de
tal o cual forma. Por ejemplo, el nombre Andros (nombre griego que significa Hombre)
podra confundrsenos con el nombre Andrs o viceversa.

Hay una forma de prevenir este tipo de problemas en MySQL: la sentencia LIKE.

La sentencia LIKE nos simplifica la vida de una manera enorme, ya que nos da la facilidad
de seleccionar un resultado con base a bsquedas no exactas. La palabra LIKE en ingls
significa COMO. En otras palabras, cuando le decimos a MySQL por ejemplo:

SELECT precio FROM tabla WHERE producto LIKE %so%;

Le estamos diciendo a MySQL SELECCIONE la columna precio DESDE tabla, EN


DONDE la columna producto SEA COMO (o CONTENGA) so

Por favor tenga mucho cuidado en la forma en la que escriben la sentencia LIKE, es decir
lo que est a continuacin de la sentencia LIKE. Por favor no olviden que la forma en la
que tenemos que escribirla es primero, comillas simple; segundo signo de porcentaje; luego
la bsqueda como tal; signo de porcentaje de nuevo; y comillas simples para cerrar la
sentencia. Cualquier error en esta sintaxis, ocasiona un error.

Adems, recuerden siempre de NO poner un signo de igual despus de la condicin


WHERE, ya que tambin proporcionar un error.

Veamos ahora la forma en la que la sentencia LIKE es utilizada, adems de un par de


errores al no utilizar la sentencia apropiadamente:

Esta es la forma en la que la sentencia LIKE funciona. En nuestra siguiente leccin


aprenderemos a ALTERAR algunas cosas en una tabla. Por el momento recuerden lo que
dijo Lucio Anneo Sneca: La vida es como una leyenda: no importa que sea larga, sino
que est bien narrada

Alterar
Hola a todos y todas, cmo estn?
El alterar una tabla no es del todo conveniente, pero se hace a veces necesario. El alterar
una tabla implica a veces el cambiarle de nombre a la tabla, o cambiarle el tipo de datos que
almacenar una tabla, o el cambio del nombre de la columna, etc.
Por qu no es del todo conveniente? En realidad es un temor milenario transmitido a
travs del ADN como un terror instintivo de cualquier programador o encargado de una
base de datos. Claro est, este temor no es infundado, no seor. El temor se deriva de una
serie de razones, para mencionar alguna, imaginen ustedes lo que sucedera si, una vez
creada la base de datos, insertados una cantidad considerable de datos y teniendo nuestra
aplicacin siendo utilizada por una gran cantidad de personas que insertan, borran,
modifican y consultan nuestra base, necesitamos cambiar el nombre de nuestra base por
alguna razn. Si la aplicacin que utiliza nuestra base de datos contiene una cantidad
igualmente enorme de llamadas a nuestra base de datos (especficamente a la tabla a la que
le cambiamos el nombre), entonces nuestra aplicacin est llamando a una tabla que ya no
existe (al menos, no existe nunca ms con el nombre que le dimos en un principio), por lo
que nuestra aplicacin (o nuestro motor de base de datos) nos enviar un mensaje de error
diciendo que la base de datos no existe ms y que nuestro puntero est apuntando (perdn
por la obvia redundancia) a un valor nulo (NULL en la mayora de las veces).
Todo lo anterior se traduce, como ya seguramente lo habrn adivinado en una cacera de
brujas dentro del cdigo de la aplicacin que hace las llamadas a la tabla a la que le hemos
cambiado el nombre. Lo que implica una cantidad de tiempo invertido (que podra de hecho
ser tiempo perdido) en una tarea que no hubiese sido necesaria si simplemente no le
hubisemos cambiado el nombre desde un principio a nuestra tabla.
Muy bien, despus de haberles asustado, veamos la sintaxis de la sentencia ALTER, que es
la que se utiliza para ALTERAR el balance del universo de nuestra base de datos:

En nuestro ejemplo vamos a utilizar algunas de las capacidades de la sentencia ALTER,


conforme avancen sus necesidades, aprendern a utilizar otras opciones de esta sentencia.
Por el momento, vean algunas de los poderes de la sentencia dicha:

Damas y caballeros, tal y como en las enseanzas de las disciplinas espirituales orientales,
nuestro deber es mostrar todos los caminos posibles. Sin embargo, no est dems hacer de
nuevo la advertencia: eviten al mximo utilizar la sentencia ALTER para modificar una
base de datos que ya est llena de informacin. Claro est, de cuando en cuando se hace
imposible prescindir de esta utilidad, pero en la medida de lo posible, no la utilicen. Hasta
Pronto.

Llaves primarias
Una palabra sobre diferenciacin. Es necesario asegurarnos de que las entradas en una base
de datos puedan ser diferenciadas de otras.

La forma de lograr esto, es a travs de lo que suele llamarse una LLAVE PRIMARIA. Lo
que una de estas llaves primarias es, es simplemente una distincin (usualmente un nmero)
que nos ayude a distinguir el contenido de una fila de otra, incluso si el contenido de una
columna es idntico a otro.

Podemos crear una llave primaria en el momento de crear la tabla o incluso crearla luego
por medio de la sentencia ALTER.

Antes de continuar y ver nuestro vdeo, debemos presentar a unas cuantas sentencias que
nos darn muchas satisfacciones (y otros tantos dolores).

Cuando creamos o modificamos las columnas de una tabla nos podemos dar el lujo de
utilizar un par de sentencias que explicamos a continuacin:

NOT NULL: Esta sentencia le dice a MySQL que el valor que debe guardarse en la
columna en donde la utilizamos no puede ser nulo, lo cual previene nuestra base de guardar
no valores en sus contenedores.

AUTO_INCREMENT: Esta sentencia hace que la columna a la que se le aplica le de un


valor numrico que se incrementar automticamente cada vez que una nueva FILA sea
agregada a nuestra base de datos.

La necesidad de explicar las dos sentencias anteriores, es precisamente porque se utilizan


en muchas ocasiones al asignar a nuestra tabla una llave nica.

Para muestra un botn, vean ahora nuestro vdeo de ejemplo y, posteriormente, el resultado
de insertar datos en la tabla que creamos en nuestro vdeo:

Vean a continuacin el resultado de insertar datos en la tabla que hemos creado en nuestro
vdeo:

Muy bien amigos y amigas, esto es todo lo que respecta a las llaves primarias. Por el
momento recuerden la frase de Billy Wilder: Recuerda que eres tan bueno como lo mejor
que hayas hecho en tu vida Que todo, TODO lo que vayamos haciendo en nuestras vidas,
sea siempre mejor que lo anterior. Hasta Pronto.

Operadores de comparacin
Bienvenidos y bienvenidas. Con un billete de ida hacia el conocimiento, iniciamos esta
nueva entrega.

Los operadores comparativos son tiles a nivel de programacin y, por supuesto, a nivel de
operaciones con bases de datos. En MySQL los operadores funcionan de manera
extremadamente similar a los operadores a nivel de lenguajes de programacin, es decir, si
las comparaciones (les decir, las operaciones comparativas) resultan verdaderas, el valor
retornado es 1; por el contrario, si la comparacin resulta falsa, el valor retornado es 0.

La forma de llevar a cabo las comparaciones es a travs de la sentencia SELECT, de la


siguiente forma:

SELECT operacin comparativa;

Las operaciones comparativas que podemos llevar cabo son:

La operacin de igualdad: 8 = 8
La operacin Mayor que: 7 > 3
La operacin Menor que: 4 < 15
La operacin Mayor o igual que: 3 >= 3
La operacin Menor o igual que: 10 <= 5
La operacin No es igual a: 10 = 3 3 <> 2

La operacin Null: 7 <=> Null (La expresin null, recuerden, no es igual a 0, null es un
valor que no ha sido programado an, lo cual no significa necesariamente que est vaco,
sino que es un valor que no est definido an) Una observacin importante, es que si
decimos que 7 = Null, el resultado no ser cierto o falso (1 0), sino que resultar en que la
expresin entera se convierte en null, por tal razn, debemos utilizar el operador especial
para la sentencia NULL < = >.

Finalmente, veamos cmo se llevan a cabo las operaciones descritas en el ambiente


MySQL:

Estos son los operadores comparativos con los que podemos trabajar, en nuestra siguiente
entrega, veremos las comparaciones con cadenas que MySQL es capaz de realizar, por el
momento: Hasta Pronto.

Operaciones con Cadenas


Los operadores de cadenas trabajan de manera muy similar a los operadores lgicos de la
leccin anterior, es decir, retornan un valor de cierto o falso (valor booleano).

Una vez ms, nuestra grande y vieja amiga SELECT hace el trabajo por nosotros, la forma
de hacerlos es:

SELECT cadena operador cadena;

Por favor presten atencin a lo que encierra a ambos valores de cadena, es decir a las
comillas simples. Lo que las comillas simples hacen, como seguramente ya habrn
imaginado, es decirle a MySQL que el valor a evaluar es precisamente una cadena de
caracteres.

De tal manera, la sentencia:

SELECT me llamo Juan = me llamo Juan;


Retornara un valor de 1, es decir verdadero.
Por otro lado, si la expresin escrita fuese:
SELECT me llamo Juan = me llamo Juan;

El resultado sera el siguiente:

Como vern, es un error cruel y grficamente mortificante (cranlo, cuando a las 3 de la


madrugada, despus de batallar con nuestra base de datos, un error similar se presenta,
entonces, entonces es cuando los y las verdaderas valientes muestran su casta evitando
llorar).

Con las operaciones de cadenas, podemos igualmente utilizar el operador LIKE, de una
manera similar a como la utilizamos al hacer consultas a una tabla, es decir:

SELECT bibidibabidibu LIKE bibidibabidibu;


Retornara un valor verdadero (afortunadamente la computadora no tartamudea al comparar
esto, lo cual es supercalifragilisticoespialidoso, no les parece?).

Una de las ventajas de utilizar la sentencia LIKE, es que nos permite utilizar comodines.
Lo que un comodn hace, como en un juego de pker (perdn si no son tahres como
nosotros), es reemplazar o bien un carcter o bien la cadena completa.

Los caracteres que utilizamos como comodines pueden ser:

El smbolo sustituto de un solo carcter, el cual es el guin bajo (_)

O el smbolo que sustituye la cadena completa, o el resto de la cadena a partir de donde


ponemos el smbolo, el cual es el smbolo de porcentaje (%)

Despus de todo lo expuesto, veamos el comportamiento de los operadores de cadena, les


parece?

En nuestra siguiente leccin queridos amigos, veremos los operadores lgicos en MySQL.
Por el momento recuerden: El inteligente se percata de todo, el tonto hace observaciones
sobre todo (Heinrich Heine) Recuerden de percatarse de todo. Y una de las bendiciones de
trabajar con la informtica, es esa, debemos percatarnos de todo.

Operadores lgico s
Los operadores lgicos en MySQL nos permiten combinar ms de una expresin, y obtener
un resultado booleano, es decir cierto o falso (1 0 respectivamente).

Tal y como vimos en nuestra leccin sobre los operadores comparativos, podemos hacer
comparaciones entre dos expresiones, lo cual nos limita de una manera bastante grande,
esto es lo que podemos librar con la utilizacin de los operadores lgicos, siendo que
podemos utilizar ms de una expresin.

As por ejemplo, la expresin:

SELECT 12 = 12 OR 28 = 115;

Nos da un valor verdadero (1), pese a que 28 es definitivamente diferente de 115 (a menos
de que las reglas de igualdad hayan cambiado al mismo tiempo que escribimos este
manual). Esto claro, es debido a que estamos utilizando el operador lgico OR, el cual
decide de entre la evaluacin de una expresin O la evaluacin de otra.

Una observacin importante, es que en MySQL, al igual que en muchos lenguajes de


programacin como C o C++, los operadores lgicos pueden escribirse con base en
smbolos. Dicho lo anterior, observen que la expresin de arriba, es totalmente equivalente
a la siguiente:

SELECT 12 = 12 || 28 = 115;

Por otro lado, la contraparte del operador OR (||) es el operador AND (Y en espaol), el
cual, al contrario del operador OR, EXIGE que ambas expresiones comparadas sean
verdaderas, de tal manera que la expresin anterior, aplicada al operador AND nos dara un
valor falso (0), la razn es que 12 = 12 es cierto, pero 28 = 115 no lo es. Recordando,
ambas expresiones TIENEN que ser verdaderas, de lo contrario, la expresin evaluada
retorna falso (0).

El operador AND, se abrevia mediante un par de ampersands (&&), y se escriben de la


misma manera en la que se escribe el operador OR (||), es decir:

SELECT 12 = 12 && 28 = 115;

Otro operador lgico es el Operador de Negacin, el cual, en realidad revierte la evaluacin


de las expresiones que estamos evaluando (mareados?, no se preocupen, nosotros tambin)

A nivel matemtico debemos recordar que la negacin de la negacin es, en realidad una
afirmacin (as pues, si la mujer de nuestros sueos nos dijese no, no te quiero, podemos
hincarnos y cantar aleluya)

Para aclarar un poquito este operador, veamos la siguiente expresin:

SELECT NOT (3 = 6);

La evaluacin normal sera obviamente falsa, sin embargo, siendo que estamos
anteponiendo el operador lgico NOT, la evaluacin resulta verdadera. Razn, lo falso de
los falso, es lo verdadero.

El smbolo para sustituir la sentencia NOT es el signo de cerrado de exclamacin (!).

Ahora, despus de saber cuales son los operadores lgicos que podemos utilizar en
MySQL, veamos un ejemplo visual:

Muy bien queridos amigos, no nos queda ms que decirles que en nuestra siguiente leccin
vamos a ver las expresiones regulares en MySQL; y que adems necesitamos que no
olviden lo que dijo Julios Marx (Groucho): Encuentro la televisin muy educativa. Cada
vez que alguien la enciende, me retiro a otra habitacin y leo un libro Los comentarios, se
los dejamos a ustedes. Hasta Pronto.

Expresiones regulares
Hola a todos.
En esta nueva entrega vamos a explicar la parte bsica de las expresiones regulares.
Debemos hacer nfasis en el hecho de que el tema de expresiones regulares es largo y
complejo, y que debido a ello trataremos de resumir lo ms posible.

Las expresiones regulares son una herramienta poderosa que nos ayuda a seleccionar
expresiones de una manera general. Podramos ver a las expresiones regulares como una
enorme extensin de la expresin LIKE, que ya vimos en una leccin anterior. Decimos

que es una extensin debido a que podemos incluir una serie de operadores lgicos que nos
ayudarn a hacer de nuestra seleccin una seleccin ms especializada y detallada.

Las expresiones regulares son privativas de MySQL, y por ende siguen sus propias reglas
de sintaxis (caprichositas las nenas).

Las expresiones regulares pueden ser utilizadas de muchas formas. Para muestra un botn:

SELECT rumpelspinskin REGEXP k;

La sentencia anterior nos dara como resultado un valor de 1, lo cual implica que es un
resultado verdadero. Quin nos dice por qu? De acuerdo, el muchacho de la camisa caf
con rombos rojos (un aplauso al que haga juego con nuestra descripcin) Correcto, la letra
k est incluida en la cadena que estamos evaluando.

Por otro lado, si evaluamos la sentencia:

SELECT rumpelspinskin REGEXP k|z;

La evaluacin en este caso tambin resulta verdadera, dado que la barra vertical le dice a
MySQL que evale si existe una expresin O la otra. Si por ejemplo la sentencia hubiese
sido REGEXP a|z, entonces la expresin hubiese sido evaluada como falsa (0). Una
observacin que se hace necesaria, es que no importa si la evaluacin incluye ms de una
palabra, de tal manera que si la expresin fuese:

SELECT rumpelspinskin REGEXP rumpelspinskin|rapunzel;

El resultado hubiese sido evaluado como cierto, dado que una de las dos palabras (o
nombres) est incluido en la expresin evaluada.

Podemos evaluar, de igual manera, el hecho de si la expresin regular comienza con un


carcter especfico, utilizando en la evaluacin el circunflejo (^), de la manera siguiente:

SELECT El perfume REGEXP ^E;

Con la expresin anterior, el resultado sera cierto (1), dado que la expresin comienza con
el carcter E

La contraparte del circunflejo viene a ser el signo de dlar ($), el cual le advierte a MySQL
que la expresin regular que deseamos evaluar debe ser el carcter final, de la siguiente
manera:

SELECT Karamazov REGEXP v$;

Esta expresin retornara un valor verdadero, dado que la expresin comparada finaliza con
el signo de dlar.

Si nuestras necesidades se encaminan a comparar solamente el primer y el ltimo carcter


de nuestra expresin, podramos utilizar un carcter comodn, de la siguiente forma:

SELECT Karamazov REGEXP ^K.+v$;

Por favor obseren que la expresin de evaluacin es ^K.+v$, y que inmediatamente


despus de la K hay un punto, esto es importante, pues le dice a MySQL que busque la
expresin regular cuyo inicio sea la letra K, el siguiente carcter sea cualquiera, los

siguiente caracteres (sin importar su nmero) sean cualesquiera y el carcter final, sea la
negra v.

En nuestro siguiente encuentro, vamos a aprender un poquitn ms sobre expresiones


regulares, por el momento, disfruten de la vida, ranse de ella y Hasta Pronto.

Expresiones regulares 2
Hola de nuevo amigos y amigas. En esta nueva leccin vamos a seguir aprendiendo sobre
expresiones regulares, haciendo que todo se vuelva ms interesante.

Para hacer que MySQL evale partes muy especficas de una expresin, podemos hacer uso
del siguiente truco (en realidad es simplemente una construccin de MySQL, lo del truquito
es slo un decir).

Digamos que lo que deseamos es averiguar si la expresin regular rren se encuentra en la


cadena Rpido corren los carros por el ferrocarril

Qu hacemos? Utilizamos la siguiente evaluacin:

SELECT Rpido corren los carros por el ferrocarril REGEXP [rren];

Esta evaluacin nos da un valor verdadero (1), dado que lo que hacen los corchetes, es
decirle a MySQL que busque la expresin regular contenida dentro de ellos, en cualquier
lugar de la cadena evaluada.

Por otro lado, si desesemos, por ejemplo, hacer un rango de evaluacin, bastara con
incluirlo dentro de los corchetes, de la siguiente manera:

SELECT alskjdhasjkdhasljkdhas REGEXP [a-z];

Lo anterior basta para que la expresin sea evaluada como verdadera, debido que estamos
especificando un rango extenso entre la a y la z. Sin embargo, bastara con incluir un
nmero (perdn, un dgito) para que la expresin sea evaluada como falsa. Por otro lado, la
expresin:

SELECT lksjfsdfsdlfsdjlsfd45646465lkashdakshdkas REGEXP [a-z0-9];

Sera evaluada como verdadera.

Finalmente, la utilidad real de las expresiones regulares se da cuando evaluamos contenidos


de una base de datos (no es simplemente un deseo de existir de ellas, claro que no). As
pues, vean un la manera de utilizar las expresiones regulares para evaluar el contenido de
una tabla.
Muy bien amigos y amigas, esto es lo que respecta a expresiones regulares en
este curso. En nuestro siguiente encuentro, vamos a hablar sobre los criterios
de agrupacin a la hora de hacer una consulta. De momento, qudense con las
palabras de Leonard Conhen: El amor no tiene cura, pero es la nica medicina
para todos los males No hay nada como el amor. Amemos lo que hacemos,
amemos lo que somos, amemos lo que damos. Hasta Pronto.

Ordenando
Salud y amor para todos! (lo del dinero depende de sus gustos)
En este nuestro nuevo coloquio, vamos a aprender a hacer consultas ms complejas, gracias
a los criterios de agrupamiento que existen.

Esto de los criterios de agrupamiento son en realidad una delicia semntica para
impresionar a los incautos. Dicho en buen cristiano, un criterio de agrupamiento es la forma
en la que le decimos a nuestro motor de bases de datos (es decir MySQL) en la que
queremos que ordene o agrupe los datos de nuestra consulta.

Para que nuestra consulta se ordene de una forma determinada, podemos utilizar la
sentencia ORDER BY en conjunto con la sentencia SELECT. Una consulta normal, es
decir, una consulta como las que hemos hecho hasta el momento, sera de la siguiente
manera:

SELECT * FROM tabla;

Para poner un orden a esta consulta, basta con hacer lo siguiente:

SELECT * FROM tabla ORDER BY columna_1;

La sentencia anterior presentara nuestro resultado de forma ascendente (de la A a la Z). La


forma ascendente es la forma en la que MySQL ordena los resultados por defecto. Sin
embargo, si nuestro deseo es cambiar el orden a desdencente (de la Z a la A), entonces basta
con poner la palabra DESC inmediatamente despus del nombre de la columna que
queremos que sea el parmetro de ordenamiento, es decir:

SELECT * FROM tabla ORDER BY columna_1 DESC;

Claro est, la columna por la cual vamos a presentar el ordenamiento, puede ser cualquiera
que nosotros escojamos, sin importar el tipo de datos que hayamos guardado en esa
columna especfica.

Ahora, veamos en accin la sentencia ORDER BY, la cual tratamos de explicar con detalle
en nuestro siguiente vdeo:
En nuestra siguiente leccin, aprenderemos a limitar los resultados de una
consulta. Por el momento cudense mucho y Hasta Pronto.

Limitando una consulta


Buen da a todos.

En esta nueva entrega, vamos a aprender a limitar una consulta.


Antes de explicar como se hace, permtannos darles un ejemplo de para que se hace.
Supongamos por un momento que estamos desarrollando una aplicacin en la cual vamos a
tener a nuestro viejo y buen amigo MySQL como motor de base de datos. Digamos que el
lenguaje en el que hemos decidido trabajar es C++, y que por consiguiente no vamos a
presentar nuestros resultados en una pgina HTML (como sera el caso de una aplicacin en
PHP). Lo anterior no parece de mayor importancia, pero pensemos por un momento en la
presentacin de la informacin en la pantalla del usuario, se imaginan una cantidad grande
(seamos aventurados y digamos una cantidad obscena en sentido figurado claro est) de
datos siendo presentados en la pantalla? Pues claro, el pobre usuario no tendra la
oportunidad de ver las primeras lneas presentadas en la pantalla, siendo que los datos se
presentaron sin conmiseracin alguna ni lmites.

No es adorable como se iluminan los ojos cuando se comprenden las razones de la


existencia de algo (de admitir es que ni polticos ni militares han logrado hacer que nuestros
ojos se iluminen).

Muy bien, despus de toda nuestra explicacin-ejemplo, diremos que la sentencia con la
que limitamos la presentacin de los datos en la pantalla es la sentencia LIMIT (una amarga
muestra de lo obvio, no les parece?) de la siguiente forma:

SELECT * FROM tabla LIMIT fila inicio, filas a presentar;

Claro est, la sentencia LIMIT puede utilizarse en amena compaa de la sentencia


ORDER BY que aprendimos en la leccin anterior de la manera siguiente:

SELECT * FROM tabla ORDER BY criterio_de_ordenacin LIMIT fila_inicio,


filas_a_presentar;

Muy bien damas y caballeros, los dejamos ahora con un ejemplo del uso de LIMIT en la
vida real.

Gracias por su presencia amigos y amigas, esperamos claro est encontrarnos pronto (en la
prxima leccin claro). Por el momento recuerden las palabras de Jacinto Benavente: El
amor es como Don Quijote: cuando recobra el juicio es que est para morir Que nuestro
amor por el conocimiento no recobre nunca la cordura. Hasta Pronto.

Inner Joins
Por una de esas casualidades recuerdan ustedes el tipo de base de datos que estamos
estudiando?

Muy bien, muy bien, precisamente son las bases de datos relacionales. Sin embargo, y hasta
el momento, no hemos visto en lo absoluto esa propiedad de las bases de datos, es decir, la
capacidad de relacin.

A partir de este momento, empezamos esa propiedad de las bases de datos relacionales y le
damos la bienvenida a las uniones (JOINS es su nombre es ingls). Los tipos de uniones
que podemos realizar sonINNER JOINS (Uniones Interiores) y LEFT JOINS (Uniones
por la Izquierda).

Las uniones ms comunes con las del tipo Interior, es decir, INNER JOINS, las cuales son
las ms sencillas. La forma en la que hacemos un INNER JOIN es simplemente
especificando las columnas de las tablas de las que queremos hacer la consulta, escribiendo
explcitamente la palabra INNER JOIN inmediatamente despus, o simplemente
escribiendo una coma entre la tabla uno y la tabla dos, posteriormente DEBEMOS
especificar una condicin WHERE a cumplir. As por ejemplo, imaginemos la siguiente
consulta:

SELECT gente.nombre, gente.apellido, empresa.sueldo, empresa.cargo FROM gente,


empresa WHERE gente.cod_empleado = empresa.cod_empleado;

La consulta anterior le dice a MySQL que SELECCIONE de la tabla gente, tanto la


columna nombre como la columna apellido; y de la tabla empresa, la columna sueldo y la
columna cargo EN DONDE la columna cod_empleado de la tabla gente sea igual a la
columna cod_empleado de la tabla empresa. Esta misma consulta podra haberse hecho de
la siguiente manera:

SELECT gente.nombre, gente.apellido, empresa.sueldo, empresa.cargo FROM gente


INNER JOIN empresa ON gente.cod_empleado = empresa.cod_empleado;

Como vern, la forma de especificar las tablas de donde estamos sacando la informacin es
simplemente con un punto (.), especificando primero el nombre de la tabla y posteriormente
el nombre de la columna, esto tanto despus de la palabra SELECT, como despus de la
palabra WHERE.

Ahora amigos y amigas, vean la forma en la que se hace un INNER JOIN en nuestro
siguiente vdeo:
Esto es todo lo que respecta a los INNER JOINS (al menos de momento), en
nuestra siguiente entrega,LEFT JOINS. De momento, disfruten de la existencia
y Hasta Pronto.

Left Joins
Cmo hacer para que la informacin de una tabla, sea mostrada junto con la de otra?

La solucin es utilizando LEFT JOIN. Los LEFT JOINS (perdn por utilizar las palabras
en ingls, pero la traduccin de unin izquierda o unin interior para los INNER JOINS no
resulta del todo satisfactoria), son uniones en las que le pedimos a MySQL que nos muestre
los datos contenidos en las tablas inmiscuidas en la consulta, sin importar que, por ejemplo,
en un par de filas el valor nulo (NULL) aparezca.

Contrario a los INNER JOINS, los LEFT JOINS no pueden llevar una condicionante
WHERE. Las razones son, claro est, que para cumplir una condicionante WHERE, la
consulta debe arrojar solamente los resultados que concuerden exactamente con la
condicin, y nuestro deseo es precisamente lo contrario.

La sintaxis de los LEFT JOINS es bastante similar a la de los INNER JOINS, salvo que
debemos utilizar la sentencia ON forzosamente, de la siguiente manera:

SELECT tabla1.columna1, tabla2.columna1 FROM tabla1 LEFT JOIN tabla2 ON


tabla1.columna3 = tabla2.columna1;

Finalmente, como recomendacin habremos de decir que los LEFT JOINS son
herramientas que podemos utilizar en casos especiales. Sin embargo, debemos tener
cuidado en el orden en el que especificamos las tablas en un LEFT JOIN, ya que si la tabla
de la izquierda es la tabla que contiene, digamos menos datos, y la de la derecha es la que
contiene ms, las filas que no concuerden sern ignoradas por MySQL.

Veamos por ejemplo el siguiente vdeo, para que todo lo anterior nos quede claro:

Agregado de datos en una tabla


Una vez ms nos encontramos en los senderos del conocimiento amigos y amigas, sean
todos bienvenidos.

Una de las grandes utilidades que podemos encontrar en una base de datos relacional es el
agregado de datos, dado que podemos crear una columna, sin necesidad de que esta se
encuentre fsicamente en alguna de las tablas de nuestra base de datos.

Para qu podra servir algo como lo que acabamos de mencionar? Supongamos el caso
hipottico de una tienda en la que hay clientes muy importantes en nuestra base, que mes a
mes compran productos. Supongamos ahora que uno de los reportes que nuestra aplicacin
genera gracias al motor de base de datos es un reporte de las rdenes puestas por nuestros
clientes muy importantes. Si tuvisemos una columna de TOTAL tendramos que duplicar
la informacin (o al menos hacer una fila diferente con un valor sumado cada vez que el
cliente importante hiciese una compra). Para evitar este trabajo innecesario, podramos
hacer un agregado de datos que hiciese la suma de todos los datos de la columna, con base
a una consulta en la que pidamos los nombres de los clientes y sus compras hasta el
momento.

Con el agregado de datos, necesitamos presentar una de las muchas FUNCIONES que
tiene MySQL (difcilmente las veamos todas en este curso, pero presentaremos las ms
importantes y significativas conforme avancemos), hablamos de la funcin SUM, la cual
devuelve la suma de una expresin. Claro que la funcin SUM no es la nica que
podramos presentar aqu, pero es la que ms se adapta a las necesidades del ejemplo.

SELECT columna1, SUM(columna2) FROM tabla1 GROUP BY columna1;

Lo que le estamos diciendo a MySQL en la sentencia anterior es SELECCIONE la


columna1 y la suma de la columna2 DE la tabla1 AGRUPADO CON BASE A la
columna1.

Algo que no puede olvidrsenos cuando hacemos un agregado de datos, es que DEBEMOS
incluir la sentencia GROUP BY (por cierto, GROUP BY, te presento a unos amigos y
amigas, amigos y amigas,GROUP BY) Esta sentencia, como su mismo nombre lo
indica, agrupa valores en una consulta con base a un criterio (en nuestro fabuloso ejemplo
el criterio sera la columna1). La sentencia GROUP BY, no slo puede utilizarse en un
agregado de datos, sino tambin en una consulta comn y silvestre como las que ya hemos
visto.

Antes de ver nuestro vdeo, los dejamos con algunas de las funciones MySQL ms
utilizadas:

MIN Devuelve el valor mnimo de una expresin


MAX Devuelve el valor mximo de una expresin
COUNT Devuelve el nmero de valores distintos de NULL en las filas recuperadas por
una sentencia SELECT
AVG Devuelve el valor medio
ADDDATE Suma un intervalo de tiempo a una fecha
ADDTIME Suma tiempos

Existen muchas otras funciones, de las cuales algunas utilizaremos en este curso.

Y ahora, nuestro vdeo:

Esto es agregado de datos en MySQL, por favor practquenlo mucho, ya que


ser su salvavidas en ms de una ocasin. Hasta Pronto.

Datos por defecto


Hola queridos amigos y amigas.

Uno de los temas,... digamos avanzaditos en MySQL (que de hecho son temas de SQL
puro) es el manejo de datos por defecto.

Datos por defecto son aquellos que especificamos al momento de la creacin de nuestra
tabla, aquellos datos por defecto que tal o cual columna mostrar, en caso de que ningn
valor sea especificado para ella al momento de hacer una insercin.

Vean el siguiente ejemplo:

Como vemos, hay ciertos datos que no han sido insertados al momento de escribir la
sentencia INSERT INTOy por lo tanto se muestran como NULL (valor nulo). Para
prevenir este problema, es que existen los datos por defecto, ellos viven para salvarnos la
vida.

Cuando hacemos un DESCRIBE nombre_tabla, notamos una columna que dice


DEFAULT, tal y como lo muestra la siguiente imagen:

La columna DEFAULT contiene la informacin de valor por defecto que contiene una
columna especfica, tal y como lo muestra la imagen, el valor por defecto de nuestras
columnas es, para todas, NULL, lo que significa que, en caso de no existir un dato
insertado, el valor que esta columna contendr ser NULL.
En nuestro vdeo alteramos nuestra tabla prueba_llave para que almacene un valor por
defecto, amn de decirle que ahora no contendr valores nulos y que sus datos sern
decimales. Por favor vanlo:

Muy bien, esto es lo que respecta a datos por defecto (DEFAULT DATA en ingls) y lo
que con ellos podemos hacer. Ahora slo recuerden las palabras de Bob Hope: La persona
que no tiene un corazn caritativo padece del peor de los males cardacos Que nuestro
corazn est siempre sano a la hora de compartir nuestro conocimiento. Hasta Pronto.

Columnas de tipo enumerado


En esta leccin, vamos a aprender un tipo de columna bastante especial e importante.
Programadores de C y C++, este tipo de columna les va a sonar un tanto conocida.

Las columnas de tipo enumerado nos ayudan a especificar valores determinados y


especficos que podemos guardar en una tabla.

Imaginemos que estamos en un mundo de buenas caricaturas y que tenemos una tienda en
donde llevamos un registro de nuestros mejores clientes, con base a la cantidad de
productos ACME que estos clientes nos compran. Nuestro clientes ms frecuentes son:

Ranma 1/2
Inuyasha
Batusai Himura
Son Gok

Estos cuatro clientes son los nicos que semana a semana nos compran productos ACME
para sus despensas, por lo que podemos ENUMERAR estos clientes en una columna
especfica, digamos del siguiente tipo:

CREATE TABLE clientes (compra_no smallint auto_increment, nombre


enum(Ranma 1/2', Inuyasha, Batusai Himura, Son Gok);

Esta tabla contendr una columna de tipo enumerado, en donde los datos a guardar podrn
ser Ranma 1/2, Inuyasha, Batusai Himura o Son Gok), de tal manera que al insertar datos
en la tabla podramos hacer lo siguiente:

INSERT INTO clientes (nombre) VALUES (Inuyasha);

Los datos insertados seran, por supuesto, 1 en la columna compra_no e Inuyasha en la


columna nombre. Sin embargo, tambin pudimos haber introducido los datos de la
siguiente manera:

INSERT INTO clientes (nombre) VALUES (2);

El resultado de lo anterior es exactamente el mismo. La razn es que definimos la columna


nombre del tipo ENUM, la cual ENUMERA los datos que le definimos al momento de la
creacin y que los referimos luego por medio de, o bien la informacin especfica (en este
caso la cadena Inuyasha) o bien con el entero que hara referencia a este dato (siendo que
la cadena Inuyasha es la segunda en el orden de enumeracin, se puede hacer referencia a
ella por medio del entero 2)

En nuestro vdeo, vemos que tambin podemos crear una tabla de enumeracin
modificando las especificaciones de la tabla por medio de ALTER TABLE. Vean el vdeo
correspondiente:
Esto damas y caballeros es lo que respecta a las columnas de tipo enumerado.
Ms por venir en nuestras siguientes lecciones. Por el momento amigos y
amigas, cudense mucho y Hasta Pronto.

Asignacin de variables
Sean bienvenidos y bienvenidas a una nueva leccin.

En este nuevo encuentro vamos a aprender como se asignan variables en el entorno de


MySQL. La asignacin de variables puede tener una gran variedad de aplicaciones, cada
una de las cuales la dictar la necesidad de cada uno de nosotros a la hora de trabajar con
nuestro querido motor de base de datos.

Para asignar una variable simplemente utilizamos la palabra reservada SET, seguida por el
signo de arroba y el nombre de la variable, posteriormente el signo de igual (que en este
caso sera el signo de asignacin) y el valor de la variable, de la siguiente forma:

SET @nombre = Tomas;

Lo que hemos hecho en este breve ejemplo es asignar a la variable nombre el valor de la
cadena de caracteres Tomas.

Para desplegar el valor de la variable basta con recurrir a nuestro viejo amigo SELECT de
la siguiente manera:

SELECT @nombre;

Todo lo anterior nos da una salida como la siguiente:

Sin embargo, la utilidad de la asignacin de variables va muchos ms all, pudiendo asignar


el valor de una columna de una tabla a una variable de una forma similar a la siguiente:

SELECT @nombre := nombre_columna from tabla1 where condicin;

La gran utilidad de esto es cuando tenemos una gran cantidad de procesos en los que
necesitamos utilizar el nombre de la variable (para referirse claro est al nombre de una
columna asignada a dicha variable)

A continuacin, vern un ejemplo de cmo asignar variables y desplegarlas en pantalla:

Otra de las grandes utilidades de la asignacin de variables es cuando hacemos enormes


procesos por lotes de comandos SQL, algo que veremos un poco ms adelante.

Por el momento, recuerden lo que dijo Alfonso II: Los libros son, entre mis consejeros, los
que ms me agradan, porque ni el temor ni la ambicin les impiden decirme lo que debo
hacer Hagamos de los libros (o de los manuales en Internet bien intencionados :-)) nuestro
mejores Consejeros. Hasta Pronto.

La funcin IF
Decisiones, cada da, alguien pierde alguien gana ave Mara

Una deliciosa cancin de Rubn Blades, un panameo genio que debera hacer msica por
siempre.

En realidad eso de las decisiones es siempre una cuestin de pensarlo mucho. Lo mismo
ocurre con nuestras bases de datos (en serio, de cuando en cuando deben ellas tomar
decisiones)

Las decisiones en MySQL, al igual que en la gran mayora de los lenguajes de


programacin, se hace con la sentencia IF (que es SI condicionante en espaol), lo cual
sonar ms que conocido para la gran mayora que tenga experiencia en algn lenguaje de
programacin.

La funcin IF en MySQL acepta tres argumentos, el primero es la condicin en si, el


segundo es la operacin a llevar se cabo si la evaluacin resulta cierta, y el tercero es la
operacin a efectuarse si la evaluacin resulta falsa.

Un ejemplo sencillo de lo anterior sera:

SELECT IF (Esto = Esto, Es igual, No es igual);

El resultado de lo anterior sera, sin lugar a dudas el siguiente:

Obviamente la evaluacin de la sentencia es cierta, siendo que la cadena Esto, es


exactamente igual a la cadena Esto, lo cual le dice a MySQL que la operacin a ejecutar
es el despliegue en pantalla de la cadena Es igual, tal y como lo vemos en la imagen de
arriba.

Como es lgico de imaginar, la funcin IF es de mayor utilidad, aplicada a una base de


datos. Por ejemplo, supongamos que existe una tabla dentro de una base de datos y
queremos utilizar una funcin IF para hacer una seleccin:

SELECT nombre, IF(edad <= 20, Joven, Adulto) FROM personas ORDER BY
edad;

En la consulta anterior, todas las personas en nuestra base de datos cuya edad sea menor o
igual que 20 tendr un mote de Joven, mientras que todas las personas mayores de 20
tendrn uno de Adulto.

Con todo y todo, veamos un ejemplo prctico en nuestro vdeo para que todo quede ms
claro:

Algo que hemos agregado en este vdeo es lo que se conoce como Alias, en nuestra primera
consulta el nombre de la columna es toda la consulta como tal, mientras que en nuestra
segunda consulta sustituimos la columna del IF por un Alias Titulo, el cual est desplegado
en la cabecera de la columna de la consulta. Como vern, MySQL se ve cada vez ms y
ms emocionante, qudense con nosotros y se pondr an ms emocionante. Por ahora,
recuerden que no hay que esperar a perder la felicidad para darnos cuenta de que estaba ah.
Cudense mucho y Hasta Pronto.

Archivos SQL
En este nuestro nuevo encuentro vamos a hablar de archivos SQL que podemos ejecutar
por medio de nuestro cliente MySQL.

Los archivos SQL o los procesos por lotes, son de gran ayuda cuando necesitamos procesar
una gran cantidad de sentencias SQL de manera repetitiva, ya que podemos simplemente
ejecutar el archivo que contiene las sentencias SQL que se han de ejecutar y ejecutar dicho
archivo con sentencias cada vez que nos sea necesario.

Los archivos SQL deben compilarse desde el sistema operativo, por ejemplo, en el caso
de los sistemas operativos de Microsoft, desde el emulador de DOS:

Por favor noten la diferencia entre la lnea de comandos del DOS (command prompt) y la
lnea de comandos de MySQL:

La forma en la que vamos a ejecutar el archivo SQL es mediante la siguiente instruccin:

mysql < nombre_del_archivo

Posteriormente, desde la lnea de comandos MySQL podemos verificar que el archivo ha


sido ejecutado satisfactoriamente. En el vdeo que les presentamos, ejecutamos un archivo
SQL y luego lo vemos desde la lnea de comando MySQL para verificar que lo que le
hemos dicho a MySQL que haga, realmente haya sido hecho, por favor vanlo:

Las utilidades de este tipo de facilidad que nos brinda MySQL es enorme. Slo tengan en
cuenta que para ejecutar el archivo SQL es necesario estar en la ruta en la que nuestro
archivo SQL est, de lo contrario el archivo no se ejecutar. Para hacer que esto no sea un
impedimento, podemos utilizar el comando PATH (una vez ms hablamos de sistemas
operativos de Miscrosoft) para especificar las rutas de donde el sistema tomar los archivos
ejecutables que se le requieran.

Esperamos sinceramente que a partir de lo que hemos aprendido, puedan ustedes crear
bases de datos y formas de manejarlas, realmente buenas, sin embargo, an nos faltan
muchas cosas que aprender, as que Hasta Pronto.

Normalizacin
Hasta este momento, hemos hecho relaciones entre tablas por medio de las uniones (LEFT
JOINS o INNER JOINS), lo cual nos permite relacionar varias tablas y hacer consultas
para poder tener los datos de varias tablas formando un conjunto valioso que se llama
Informacin.

Sin embargo, hasta este momento, no hemos mencionado el tipo de relaciones que pueden
existir entre tablas (slo hemos mencionado el tipo de uniones que pueden existir, no el tipo
de relaciones).

A nivel terico, diremos que el tipo de relaciones entre tablas pueden ser:

DE
UNO
DE
UNO
DE MUCHOS A MUCHOS

A
A

UNO
MUCHOS

Para ejemplificar lo anterior, veamos un ejemplo de la vida real:

Veamos nuestro cuerpo, nuestra mano, por ejemplo puede pertenecer a un solo de nuestros
brazos, lo cual, es obviamente una relacin de uno a uno, una mano, un brazo.

Por otro lado, nuestra mano puede tener varios dedos, pero los dedos de nuestra mano
derecha, pueden pertenecerle exclusivamente a nuestra mano derecha, es decir: una mano,
muchos dedos, pero muchos dedos pertenecen a una sola mano, lo cual define a la
perfeccin una relacin de uno a muchos.

Finalmente, los microbios de nuestra mano derecha pueden fcilmente pasar a nuestra
mano izquierda, es decir muchos microbios, muchas manos (tranquilos, hasta los que se
lavan a diario padecern los problemas de los microbios), lo que obviamente implica una
relacin de muchos a muchos.

Antes de proseguir, hay que decir que MySQL no soporta la relacin de muchos a muchos,
por lo que se hace necesaria la intervencin de una tabla intermediaria.

Hemos de decir que todo lo anteriormente mencionado es parte de lo que se conoce como
NORMALIZACIN, lo cual indica el grado de eficiencia con la que nuestra base de datos
est diseada.

Una vez que nuestras relaciones estn definidas, pues, dicho de nuevo hay que saber que
tipo de relacin habremos de establecer entre nuestras tablas (de uno a uno, de uno a
muchos o de muchos a muchos), debemos proceder a la segunda parte de la normalizacin.

Debemos tener en cuenta que (y esto es muy importante), las tablas que nosotros definamos
en nuestra base de datos, debern cumplir con todas las necesidades de nuestro usuario
final, de nuestro personaje de soporte tcnico, de nuestro programador estrella, etc. etc. etc.
De tal manera que, debemos preguntarnos si es ms eficiente tener una columna repetitiva
en una sola tabla, o tener una tabla especfica para evitar que, por ejemplo el usuario
cometa errores de digitacin a la hora de consultar datos y darle la posibilidad de cometer
errores de digitacin (dedazos para los ms eruditos).

Para explicar un poco ms esto, digamos por ejemplo, que estamos modelando una base de
datos en la que se hace necesario insertar una serie de productos (digamos libros y discos) y
que dichos datos ser el usuario el que los tiene que insertar, junto con el nombre del disco
o el libro respectivo claro est. Lo ms lgico es tener una pequea tabla con los tems libro
y disco, de tal manera que el usuario no tenga que digitar libro o disco cuando vaya a
insertar un producto, sino nicamente seleccionarlos de una tabla que ya los guarda para l.

Esto mis queridos amigos y amigas, son los principios de la normalizacin. Ms por venir?
Claaaaaaaaaaaaaro, pero de momento, Hasta Pronto.

Optimizacin
A la forma en la que nosotros hagamos una base de datos ms eficiente, ms fcil de
depurar, ms sencilla de comprender, ms veloz, etc., se le llama OPTIMIZACIN.

La OPTIMIZACIN no es ms que el devaneo intelectual (y moral) de nosotros como


diseadores de la base de datos, en el cual nos hacemos preguntas trascendentales para
nuestra filosfica vida de diseadores de bases de datos, tales como:

NOS INTERESA LA VELOCIDAD EN NUESTRA BASE DE DATOS?


NOS PREOCUPA LA SEGURIDAD DE NUESTRA BASE DE DATOS?
NOS PREOCUPA LA CAPACIDAD DE ALMACENAMIENTO PARA NUESTRA
BASE
DE
DATOS?
NOS PREOCUPA LA INTEGRIDAD DE LOS DATOS DE NUESTRA BASE?

Estas preguntas son las que deben regir la forma en la que vamos a disear nuestra base de
datos.

Por ejemplo la velocidad con la que nuestra base de datos ha de trabajar es siempre una de
las prioridades para las personas que nos piden y que utilizan nuestras bases de datos.

La situacin de la seguridad se convierte en algo vital en los casos de disear bases de datos
que sern utilizadas en aplicaciones on line (es decir en el Internet), pero se vuelve algo
realmente irrelevante si es que vamos a correr una aplicacin en nuestra computadora
personal y no la utilizaremos en Internet.

La capacidad de almacenamiento toma importancia exclusivamente cuando diseamos


bases de datos para personas cuyo presupuesto es un tanto limitado y por consiguiente no
puede invertir en una capacidad de almacenamiento muy grande, aunque es de admitir que
la capacidad de almacenamiento no es hoy un factor tan determinante, siendo el caso que
los precios de los dispositivos de almacenamiento no son hoy tan elevados como lo fueron
hace algunos aos.

Finalmente, la integridad de los datos es siempre, algo importante en el diseo de bases de


datos.

As pues, parte de la optimizacin implica lo siguiente:

Evitar la duplicacin (parte de lo que explicamos en nuestra leccin anterior)

Evitar la inclusin de columnas de tamao variable (como VARCHAR y TEXT)

Utilizar los tamaos de columna (o mejor dicho de tipo de datos) ms pequeo que
nuestras necesidades lo permitan (como SMALLINT)

Utilizar en la medida de lo posible los tipos numricos sin signo (UNSIGNED) ya


que esto aumenta la eficiencia con la que nuestra base ha de trabajar

Utilizar la optimizacin de las tablas para evitar, como ya dijimos, la duplicacin


innecesaria de los datos

Considerar la desnormalizacin de las tablas (es decir, sacrificar la elegancia, para


ganar un poco de velocidad), o cual implica, si no hay ms remedio, permitir la
duplicacin o la redundancia de informacin

Utilizar datos por defecto cada vez que nos sea posible

Utilizar los ndices para acelerar nuestras consultas

En nuestro siguiente encuentro, Una Palabra sobre Seguridad. Hasta Pronto

Seguridad
La seguridad, uno de los mayores retos del siglo XXI, en todos los aspectos, el social, el
econmico (ay, tambin el econmico) y claro est, tambin el informtico.

MySQL proporciona una gran cantidad de elementos de seguridad, mismos que, claro est,
estn a nuestra total disposicin. Una de estas bendiciones de seguridad son las garantas de
uso para diferentes usuarios. Podemos definir varios usuarios para nuestras bases de datos,
y a todos y cada uno podemos garantizarles, negarles o revocarles ciertos privilegios para el
manejo de nuestras bases de datos.

Una sana recomendacin es, precisamente, permitir el abuso total para con nuestras
bases, nica y exclusivamente al usuario root (que vendra a ser algo as como el
superadministrador).
Para garantizar los privilegios a un usuario especfico, tenemos la sentencia GRANT, que
es precisamente la que le dice a MySQL si tal o cual usuario tiene o no tiene los privilegios
para hacer algo con nuestras bases de datos. Ese algo podra ser la habilidad de hacer

consultas (SELECT), la habilidad de actualizar o modificar (UPDATES), la habilidad de


insertar informacin (INSERT) o la habilidad de borrar (DELETE).

La Instruccin GRANT es utilizada una vez que iniciamos una sesin MySQL con el
usuario ROOT, es decir, cuando el comando del sistema escribimos lo siguiente:

mysql u root

Una vez dentro de la sesin con el usuario raz o superadministrador, debemos utilizar la
sentencia GRANT de la siguiente manera:

GRANT privilegio_a_otorgar ON nombre_base_de_datos TO usuario@localhost


IDENTIFIED BY password

Posteriormente podemos probar estos privilegios entrando a otra sesin de MySQL con el
usuario al cual le hemos permitido los privilegios e intentar hacer algo que no le hemos
permitido a dicho usuario.
Un ejemplo, una vez estemos dentro del usuario ROOT:

GRANT SELECT ON prueba.* TO usuario1@localhost INDENTIFIED BY


dejameentrar;

Para probar esto debemos salirnos de la sesin ROOT simplemente digitando EXIT en la
lnea de comandos de MySQL y entrando luego al usuario especfico digitando lo siguiente:

mysql u usuario1 p

De esta manera hemos iniciado una sesin con el usuario USUARIO1. La sentencia
GRANT anterior le dice a MySQL:

Garantice el privilegio de SELECCIONAR EN prueba EN usuario@localhost


IDENTIDICADO POR dejameentrar;

La directiva p que hemos especificado al entrar en la sesin usuario1 hace que MySQL
nos pida una contrasea antes de entrar, recordemos que la contrasea especificada fue
dejameentrar, as que escribimos precisamente dejameentrar al momento de entrar a la
sesin.

Una vez dentro, al estar en la lnea de comandos de MySQL (mysql>) podemos intentar,
por ejemplo, algo como esto:

DELETE FROM prueba;

Lo que MySQL nos dir es que hay un error, un error 1142 para ser ms exactos, cada vez
que intentemos hacer algo para lo que nuestro usuario no tiene usuario (recuerden por favor
que usuario1 slo tiene permiso para hacer consultas (SELECT).

Finalmente, podemos solicitarle a MySQL los privilegios de un usuario especfico por


medio de la sentenciaSHOW GRANTS, tal y como lo muestra la imagen:

Como vern, esta es una herramienta poderosa en cuanto a la seguridad de nuestras bases
de datos se refiere, sin embargo, hay otras tantas cosas que ver. Pero eso ser ms adelante.
Hasta Pronto

Revocando privilegios
Otra de las posibilidades de seguridad que tiene MySQL es la de revocar privilegios
otorgados a un usuario especfico.

Posiblemente se estn preguntando, para qu podramos querer revocar privilegios que


hemos otorgado previamente a un usuario?

Imaginemos el siguiente caso un tanto pattico: Una madre tiene una base de datos en su
computadora personal, y en un arranque de plena confianza decide proporcionarle a su hijo
un poder total y absoluto sobre sus bases de datos haciendo lo siguiente:

GRANT ALL ON *.* TO mi_hijo@localhost IDENTIFIED BY bebesito;

Lo anterior le proporciona poder total al hijo de nuestra incauta madre sobre todas las bases
de datos (*.*) Un buen da, despus de una sesin de videojuegos aburridos, el hijo decide
hacer uso del poder que su querida mamasita le ha proporcionado.

Entra a su sesin haciendo lo siguiente:

mysql u mi_hijo p

Luego escribe su palabra secreta (es decir bebesito) y luego escribe lo siguiente:

SHOW DATABASES;

MySQL le dice que existen, digamos 3 bases de datos con los nombres base1, base2 y
base3 (hey, es slo un ejemplo). Estas bases de datos representan la vida de la madre del
pequeuelo y ahora, el beb de mam tiene todo el poder. As pues, el nene empieza a
escribir lo siguiente:

DROP DATABASE base1;


DROP DATABASE base2;
DROP DATABASE base3;

Posteriormente el nio se da cuenta de que todo ha desaparecido, en el preciso momento en


el que la madre llega a su casa, el nio observa detenidamente al personaje que acaba de
entrar y le dice con toda la inocencia infantil de la que un nio es capaz: Mira mam, sin
bases!!

Muy bien, despus de que la madre despierta de su desmayo, decide castigar al querubn
revocando los privilegios que le otorg (amn de un penoso incidente en el que un fuete

estar incluido claro est). De tal suerte que la madre entra a su computadora y escribe lo
siguiente:

mysql u root

Y desde la lnea de comandos escribe lo siguiente:

REVOKE ALL ON *.* FROM my_hijo@localhost;

Desde este momento en adelante, el hijo de la pobre madre, no tendr ms poderes ni


posibilidades de darle ms regalitos a su madre.

Esto es todo lo que respecta a REVOCAR privilegios. Ms de seguridad en nuestra


siguiente leccin, por el momento, recuerden lo que dijo Bertrand Russell: Los cientficos
se esfuerzan por hacer posible lo imposible. Los polticos por hacer lo posible imposible
Que conste, no lo dijimos nosotros. Pero ya en serio, que nuestro objetivo sea siempre hacer
posible lo imposible, no lo contrario, con toda la amplitud que este deseo implica. Hasta
Pronto

El uso de la base de MySQL


Hola todo el mundo.

En esta entrega vamos a comprender a la base de datos que, sin importar cuantas bases de
datos tengamos en MySQL, esa base de datos siempre existir, hablamos de la base de
datos que se llama mysql.

Esta base de datos contiene una gran cantidad de informacin que el mismo motor de base
de datos utiliza a la hora de trabajar (lo cual podra sonar como si nosotros nos hicisemos
una operacin de cerebro con nuestras propias manos, pero la verdad es que funciona).

Las tablas que estn contenidas en la base mysql son las siguientes:

Y una de las tablas ms utilizadas es la de nombre user, la cual contiene la informacin


de los usuarios que tienen acceso a nuestras bases de datos y los privilegios que estos tienen
sobre nuestras bases de datos a nivel general.

Por otro lado, la tabla db guarda la informacin de los privilegios que se le han otorgado
a un usuario a una base de datos especfica.

Volviendo a nuestra tabla user, esta contiene, como ya habamos dicho, toda la
informacin de los usuarios que tienen privilegios globales a todas las bases de nuestro
motor.

Si recuerdan nuestras lecciones anteriores, vimos las sentencias GRANT y REVOKE, las
cuales servan para garantizar o revocar privilegios a nuestros usuarios.

Por otro lado, esas operaciones pueden hacerse manualmente, mediante la insercin (o
actualizacin o borrado) de datos de la tabla user.

La forma en la que vamos a hacer esto es, simple y sencillamente, mediante las sentencias
SELECT, UPDATE o DELETE que ya aprendimos.

Las columnas en las que podemos aadir datos a la tabla user son las siguientes:

As pues, si deseamos que un usuario especfico tenga privilegios slo de SELECCIN,


debemos hacer lo siguiente:

INSERT INTO user (Host, User, Password, Select_priv) VALUES (localhost,


yosoy, Password(yavine), Y);

Lo anterior le garantiza al usuario yosoy la capacidad de seleccionar, pero de nada ms, el


usuario yosoy no puede ni modificar, ni agregar, ni borrar datos de las bases de datos a las
que tenga acceso.

Finalmente, debemos agregar que una vez que hemos agregado los privilegios para un
usuario determinado, debemos utilizar la sentencia:

FLUSH PRIVILEGES;

La sentencia anterior hace que los cambios que hayamos hecho a un usuario determinado
tomen efecto.

En nuestro siguiente encuentro vamos a hablar sobre la ENCRIPTACIN en MySQL. Por


el momento recuerden lo que dijo Amos Bronson Alcote: La enfermedad del ignorante es
ignorar su propia ignorancia No hay nada mejor que saber con toda certeza, que siempre
hay mucho, muchsimo que aprender. Hasta Pronto.

Encriptacin
Esconder, una de las fascinaciones de muchos seres humanos: esconder lo que puede ser
escondido, e incluso lo que no se puede.

La encriptacin en MySQL puede hacerse de dos formas. La primera, que es una forma de
encriptacin, digamos al azar, que es la forma de encriptacin de la que no se puede
regresar, es decir, una encriptacin que no se puede revertir. Dicho de otra forma, si por
ejemplo lo que hemos encriptado con este formato es una palabra de acceso, y se nos olvida
dicha palabra de acceso, entonces, dicho con un lxico florido: Estamos fritos.

La segunda forma es una encriptacin que puede ser recuperada y que por lo tanto, puede
ser desencriptado.

La funcin ENCODE toma dos argumentos, el primero es la cadena que habremos de


encriptar y la segunda es la secuencia que ser utilizada para encriptar la informacin. Un
ejemplo sera:

Como tambin habrn visto, la sentencia DECODE sirve precisamente para revertir el
efecto de encriptacin.

Una recomendacin es que activen la capacidad de seleccin en la lnea de comando para


que puedan luego seleccionar y luego pegar la cadena que ha sido encriptada para el
proceso de desencriptacin.

La otra forma de encriptacin, la que no puede revertirse, se hace por medio de la funcin
md5 de la siguiente forma:

Otra de las formas de encriptacin, irreversible como md5 es mediante la sentencia


PASSWORD, que se hace de manera idntica a la funcin md5, es decir:

SELECT PASSWORD(hola);

La forma en la que MySQL sabe si el password introducido es el adecuado, es comparando


la cadena resultante de la encriptacin con la cadena encriptada, si esa comparacin resulta
cierta, entonces MySQL sabe que el password era el correcto.

Con esto sabemos ahora las formas de encriptacin que MySQL proporcionar. Ms por
venir en prximas lecciones, por el momento: Hasta Pronto.

Una base de datos


En estas ltimas entregas, vamos a construir una basesita de datos paso a paso,
incluyendo las entidades y las relaciones entre stas. As que abrchense sus cinturones y
empecemos.

En primer lugar, vamos a plantear el problema:

Necesitamos una base de datos que sea capaz de manejar una librera, de la siguiente forma:

El usuario debe ser capaz de aadir un libro al inventario.


El usuario debe ser capaz de sacar un libro del inventario
El usuario debe ser capaz de consultar el precio, el autor o el gnero del libro

Para comenzar, debemos definir las entidades de nuestra base, al mismo tiempo que definir
las relaciones que habrn de existir en nuestra base. Las entidades que podran intervenir en
nuestra base son

El lector
Nombre del Libro
El gnero del Libro
El autor (o autores) del libro
Las relaciones entre entidades seran:

Estas son las relacione entre las entidades (OJO, la lnea triple indica "...a muchos", lo que
significa que, por ejemplo, El Libro tiene una relacin de uno a muchos con El Gnero)

En nuestra siguiente entrega, la definicin de nuestras tablas y la forma en la que se


relacionarn. Por el momento. Hasta Pronto.

Un ejemplo
Hola una vez ms amigos y amigas, en esta entrega veremos la definicin de las tablas para
nuestro pequeo ejemplo.

Una vez que tenemos las entidades y relaciones bien definidas, podemos empezar por dejar
las ideas en el papel y el trabajo en la computadora. Definamos pues las tablas que vamos a
utilizar.

La tabla Lector contendr las columnas:


Cod_lector (llave primaria, entera y de autoincremento)
Nombre
Apellido
Telefono
Direccion
Fecha_nacimiento
Comentarios

Todo lo anterior en MySQL se traduce en lo siguiente:

CREATE TABLE Lector(


Cod_lector SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Nombre char(25) NOT NULL,
Apellido char(25) NOT NULL,
Telefono decimal(10) NOT NULL,
Direccion char(65) NOT NULL,
Comentarios TINYTEXT,
PRIMARY KEY(Cod_lector)
);

Posteriormente debemos definir la tabla Libro, que por cierto tendr una relacin con la
tabla Gnero:

CREATE TABLE Libro(


Cod_libro UNSIGNED NOT NULL AUTO_INCREMENT,
Nombre_libro char(45) NOT NULL,

Genero TINYINT UNSIGNED NOT NULL,


Precio NOT NULL
Vendido_a SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY(Cod_libro)
);
La relacin de la tabla anterior con la tabla que definiremos a continuacin, es decir la tabla
Gnero, es que los gneros sern insertados con base a un nmero entero en la tabla libro, y
los gneros como tales, se definirn en una tabla sola.

CREATE TABLE Genero(


Cod_genero SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Nombre char(20),
PRIMARY KEY(Cod_genero)
);

Ahora definamos la tabla Autor:


CREATE TABLE Autor(
Cod_autor SMALLINT UNSIGNED NOT NULL,
Nombre char(50),
PRIMARY KEY(Cod_autor)
);
Esta es la definicin de las tablas de nuestro ejemplo.Con esta definicin, podemos
empezar a poner en prctica lo que hemos aprendido a lo largo de este curso. En nuestro
siguiente encuentro, las consideraciones finales, y el triste adis.Hasta Pronto.

Consideraciones finales
Hola queridsimos amigos, esta es nuestra ltima entrega de nuestro curso de MySQL.

Lo que nos falta por agregar no es mucho, excepto tal vez un par de consultas con el
ejemplo que creamos.

Con todo y eso, lo que si necesitamos hacer son algunas observaciones finales a nuestro
curso.

Primero: recuerden siempre visitar constantemente el sitio de MySQL www.mysql.com


para estar enterados de las nuevas versiones (estables) que MySQL nos proporciona.

Segundo: Recuerden que si estn trabajando en una computadora a la que varias personas
tienen acceso, y son ustedes los administradores (como debe ser claro est), protjanse
creando varios usuarios para las bases de datos, cada uno de estos usuarios con privilegios
especficos.

Tercero: Recuerden que aqu no hemos hablado de ningn lenguaje de programacin con el
que podamos integrar MySQL. Sin embargo existen muchos lenguajes con los que
podemos trabajar.C++ es una sugerencia bastante acertada, al mismo tiempo que PHP
(PHP, por cierto, tiene un espacio aqu en aulafcil.com, ya que hay dos cursos de PHP, el
segundo de los cuales, habla de la integracin de PHP con MySQL)

Finalmente, algunas observaciones a nuestra base de datos creada recientemente:

En primer lugar debemos decir que la base de datos no est del todo normalizada (o
desnormalizada en algunos casos).

Por otro lado, las relaciones no son del todo apegadas a la vida real, ya que segn nuestro
modelo un autor puede tener muchos libros, pero un libro no puede tener muchos autores,
lo cual no es verdad, por lo que debemos crear una tabla puente entre la tabla libro y la
tabla autor, para que sirva de intermediario en una relacin muchos a muchos. Lo mismo
aplica claro est a la relacin entre libro y lector.

Finalmente, hubiese sido una jugada ms inteligente, tomar otra columna como llave
primaria en la columna libro, siendo que cada libro ya lleva en la vida real una llave
primaria, es decir el cdigo ISBN, el cual es nico a cada libro en el mundo.

Muy bien amigos y amigas, el momento triste y alegre ha llegado. Nos despedimos
deseando en el alma tener un poco ms de tiempo y espacio juntos, pero nos llena de alegra
el haber tenido su presencia a lo largo de este delicioso camino del aprendizaje. Esperamos
sinceramente que nuestros caminos se crucen nuevamente en el futuro y que sea
precisamente para compartir conocimientos. Cudense, sean felices, disfruten de la vida
como si fuese el ltimo da de su vida, y Hasta Pronto.

You might also like