Sei sulla pagina 1di 43

MANUAL DE MySQL. INTRODUCCIÓN

Sean bienvenidos y bienvenidas al mundo de los motores de las bases de datos, uno de los pilares de las

ciencias informáticas, ¿por qué?, pues porque en la gran mayoría de las ocasiones, los datos que utilizamos o insertamos o modificamos o borramos, necesitan estar "guardados" en algún lugar. ¿Un ejemplo?, claro, los

juegos de vídeo,

¿no lo creen?, cómo creen entonces que guardan las puntuaciones más altas, los nombres

de los jugadores, etc., etc.

Las bases de datos están por todos lados a nivel informático, están cuando pasan un código de barra por la lectora de códigos en el supermercado; están en nuestros carnés de empleado que retienen nuestra información gracias a un número de empleado o un código de barra; están en internet cuando entramos a comprar algo en línea; están en el departamento de tránsito cuando debemos pagar una multa (dolor, dolor, muchísimo dolor).

Este curso es sobre uno de los motores de bases de datos más famosos, léase MySQL. Una de las razones de dicha fama, es el hecho de que es de código 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 estándar utilizado para manejar las bases de datos, mismo que también aprenderemos en este curso.

En fin, dicho lo anterior, empecemos por decir que MySQL puede ser bajado de la dirección www.mysql.com. Una "guía" completa de bajado e instalación son las siguiente imágenes:

de la dirección www.mysql.com . Una "guía" completa de bajado e instalación son las siguiente imágenes:

Las imágenes 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 instalación y la forma de iniciar nuestra sesión en MySQL como usuario raíz o ROOT.

Después de lo anterior, nos resta decir que a partir de nuestra próxima entrega, empezamos a ver a fondo lo que son realmente las bases de datos.

MANUAL DE MySQL. LAS BASES DE DATOS RELACIONALES 1

Muy bien, hablemos un poco sobre las bases de datos relacionales en esta ocasión. 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 información, con base a un lenguaje estándar llamado SQL (Structured Query Language), el cual es, podríamos decir, la razón 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 relación entre ellas (para los que conocen un poquitín 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 cómo 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). Podríamos pensar en las bases de datos como en cajas, dentro de las cuales hay celdas, cada una guardando algo.

dentro de las cuales hay celdas, cada una guardando algo. Bien, las bases de datos están

Bien, las bases de datos están conformadas por TABLAS, que son las contenedoras de la información. Es decir, la base de datos sería el cuarto conteniendo las cajas (que serían 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 información genérica de la tabla, que es en donde se guardará la información específica, es decir, en las filas.

Así pues, si tenemos un par de datos que guardar, es decir un nombre y un apellido, digamos: Ernesto Chávez; estos datos formarían una fila, pues corresponden a una persona específica, sin embargo, Ernesto se guardaría en la columna Nombre y Chávez se guardaría en la columna apellido.

De esta manera, las tablas mantienen comunicación entre columnas, para extraer la información específica de las filas.

Pero también hay comunicación entre tablas (incluso entre bases de datos). Sin embargo, esto, lo aclararemos en nuestra siguiente entrega. Hasta Pronto.

MANUAL DE MySQL. LAS BASES DE DATOS RELACIONALES 2

Dicen por ahí que no hay nada más importante que la comunicación y en cuestión de bases de datos, esto es, en definitiva, un axioma. Ya hablamos de la comunicación entre columnas dentro de una misma tabla, que a su vez está contenida dentro de una base de datos. Ahora bien, hablemos de la comunicación entre tablas dentro de una misma base de datos.

Como seguramente recordarán, hemos hablado ya de las llaves. Las llaves no son más que, para los que saben de C y C++, punteros que, de una tabla, apuntan a otra, teniendo en cuenta un dato común. Dicho en buen cristiano, y explicado con un ejemplo práctico:

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, amén claro del clima de culpabilidad, vemos que todo el mundo tiene su licencia en la mano, la cual entregamos a la amabilísima secretaria de la ventanilla; la secretaria toma nuestra licencia de conducir, mira los números y digita en la computadora los números que corresponden al número de nuestra licencia. La computadora, después de algún tiempo, muestra en pantalla la información sobre la persona poseedora de la licencia, es decir, nosotros. Hasta este punto, podríamos 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 deberían ser guardadas en otra tabla, para evitar que la información se mezcle y se haga una cantidad innecesaria de información; así pues, el pago de la multa se procesa en otra tabla, pero, de alguna manera debe estar vinculada a nuestra información, sino, habría un verdadero desastre de información en las oficinas de tránsito, ¿cómo imaginan ustedes que dicho vínculo podría llevarse a cabo? Veamos las opciones:

- El nombre de la persona

- El apellido de la persona

- El número de su licencia

Si escogiésemos el nombre habría un problema, cuántas personas existirían con el mismo nombre; la misma historia pasaría si escogiésemos el apellido; por otro lado, escogiendo el número de licencia (que es único) podríamos establecer un vínculo entre la tabla de nombre,… digamos datos_generales, y la tabla de nombre pagos_efectuados. Dicho en términos de bases de datos, la llave entre una tabla y otra sería una columna que contenga el número de licencia, y que debería 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 número de licencia, que a su vez, corresponde a una persona con un nombre y un apellido específico.

MANUAL DE MySQL. Lenguaje SQL Parte 1

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 específico.

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 más 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 través de SQL) que muestre los datos en una tabla específica le decimos:

SELECT * FROM Nombre_de_tabla;

Para el que sepa un poquitín de inglés o para el que tenga un diccionario español-inglés, inglés-español a la mano, será más 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 pregúntenle 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 están guardadas en MySQL Muestra las tablas contenidas en una base de datos específica. Muestra las columnas contenidas en una tabla específica.

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 instrucción que ya les explicamos SHOW TABLES.

Pero bueno, veamos un ejemplo práctico, con un vídeo, ¿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.

MANUAL DE MySQL. Lenguaje SQL Parte 2

Holaaaaa. ¿Cómo están? 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, teníamos 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 información a la que apuntan los punteros (las filas y perdón por la redundancia). Pero antes de crear tablas, columnas y filas, necesitamos crear el CONTENEDOR de esta información, 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 fácil?, si es usted (si usted) de las personas que gustan de presumirle a las amistades de lo mucho que sabe, y quería presumir sobre sus conocimientos únicos de crear bases de datos, dada la dificultad que representa, lo sentimos, su objetivo no se cumplirá.

Efectivamente, la creación de la base de datos es así de sencilla, pero, ¿qué pasaría si el nombre de la tabla ya existe, sencillo, MySQL produciría un error 1007, si, un feo (y ruidoso pues produce un efecto sonoro en el altavoz de la computadora) error. Cómo 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 están preguntando es ¿y qué ganamos con eso?, pues bien, en realidad es una cuestión de forma. Supongamos que tenemos una aplicación que utiliza nuestro motor de base de datos, digamos PHP y a la hora de utilizar la aplicación tenemos la necesidad de crear una base de datos en tiempo real, esto nos produciría un error en nuestra pantalla, el cual se desplegaría en nuestro navegador de Internet, lo cual sería desastroso para nuestra aplicación.

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 botón, vean el siguiente vídeo:

MANUAL DE MySQL. CREANDO TABLAS

¡Ah, la creación! Probablemente una de las necesidades humanas más sublimes (y si no que lo nieguen los artistas, los programadores o,… las madres)

Tal y como lo prometimos, vamos a aprender a crear tablas (el delicioso inicio de una larga y hermosa amistad entre nosotros y MySQL)

Las tablas son, como ya sabemos, los grandes contenedores de la información en un modelo de bases de datos relacionales (ha, ha, cuidadito con decir que no se recuerda), sabiendo claro que cada tabla habrá de dividirse en filas y columnas.

Imaginemos que deseamos crear lógicamente (es decir en MySQL) una tabla como la siguiente:

nombre

apellido

telefono

direccion

nombre_1

apellido_1

telefono_1

direccion_1

nombre_2

apellido_2

telefono_2

direccion_2

nombre_n

apellido_n

telefono_n

direccion_n

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 recordarán, 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 práctico de cómo se crean las bases de datos:

Antes de finalizar con esta lección, debemos hacer una aclaración, en el vídeo mostrado, después de la sentencia “CREATE TABLE uno(“, hemos presionado la tecla ENTER o INTRO simple y sencillamente para hacer más 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 línea de código (o más 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 vídeo en la cual, después del nombre de la columnas, hemos escrito cuatro letras: char y un número.

MANUAL DE MySQL. TIPOS DE DATOS

Estamos juntos de nuevo y les damos la bienvenida.

En la última lección 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 continuación:

CHAR/CHAR(): Las columnas de tipo char o char() almacenan un carácter 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 pequeño de 0 a 255 o de -128 a 127

BIT BOOL BOOLEAN: Todos estos tipos son sinónimos de TINYINT(1).

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

MEDIUMINT: Almacena un entero de tamaño medio entre -83888608 y 8388607 y entre 0 y 16777215 sin signo.

INT/INTEGER: Contiene un entero de tamaño normal (este normal es para nosotros en realidad un tamañote) entre -2147483648 y 2147483647 o entre 0 y 4294967295.

BIGINT: Como podrán 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 número de coma flotante. Opcionalmente puede acompañarse (al tipo flota sin los paréntesis) de la palabra precision que le indica la precisión decimal que se desea, que puede llegar hasta 24 para precisión sencilla y de 25 a 53 para una precisión 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 número de coma flotante de precisión normal. Sus valores van desde - 1.7976931348623157E+308 y -2.2250738585072014E-308, 0, y entre 2.2250738585072014E-308 y 1.7976931348623157E+308. Una vez más, si se define UNSIGNED, los valores negativos no son permitidos.

DOUBLE PRECISION REAL : Son sinónimos de DOUBLE

DECIMAL: Guarda un número de coma flotante sin empaquetar. Esto de sin empaquetar implica que se guarda como una cadena (véase CHAR), usando un carácter para dígito del valor.

DEC NUMERIC FIXED : Son todos sinónimos de DECIMAL

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

DATETIME: Contiene un “MIX” (para demostrar que sabemos de terminología 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 año 2037 (lo cual suena como a un libro de ciencia ficción 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 año en formato de 2 o 4 dígitos, siendo el valor por defecto 4. Los valores permitidos son desde 1901 a 2155 y 0000 en el formato de 4 dígitos y desde 1970 a 2069 en el formato de 2 dígitos (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 máximo de 65535 valores diferentes.

SET: Almacena un conjunto. Es una cadena que puede tener 0 ó más valores. Todos esos valores debe estar entre una lista de valores. El máximo de miembros de un conjunto puede ser 64.

MANUAL MySQL. INSERTAR DATOS

Hola, sean bienvenidos a esta reunión.

La garantía de que nuestras bases de datos están funcionando como Dios manda, es que haya datos que se están insertando constantemente.

En esta nueva lección, vamos a aprender como insertar datos en MySQL. Tal y como vimos en nuestra lección 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 inserción en MySQL (basados en el lenguaje SQL, claro está) se hace por medio de la sentencia INSERT INTO , cuya sintaxis básica es:

INSERT INTO nombre_tabla (columna_1, columna_2,… columna_n) VALUES(valor_1, valor_2,… valor_n) WHERE condición(opcional)

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 serán insertados.

(columna_1, columna_2,… columna_n) especifica las columnas en la que los datos se insertarán.

VALUES es la palabra que “avisa” a MySQL que los datos a continuación son los que se insertarán.

(valor_1, valor_2,… valor_n) son los datos que habrán 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 condición a cumplirse para que la inserción se lleve a cabo.

Una palabra sobre las condiciones antes de ver nuestro vídeo. Las condiciones que le hemos de poner a nuestras inserciones dependerán exclusivamente de nuestras necesidades, por ejemplo, si necesitamos que la columna nombre se grabe única y exclusivamente si cumple con la condición que sea “Pancracio”, entonces nuestra condición sería WHERE nombre = “Pancracio” Como ya lo dijimos, la condición WHERE es opcional y puede no incluirse en nuestras sentencias INSERT INTO, en caso de no ser insertadas, los datos se insertarán sin importar nada (o casi nada).

Muy bien, hemos visto los principal en cuanto a inserciones se refiere, para que vean un poquitín de práctica, los dejamos con el siguiente vídeo:

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

nombre: que almacenaría una cadena de caracteres de hasta 15 apellido: que almacenaría una cadena de caracteres de hasta 15 telefono: que almacenaría una cadena de caracteres de hasta 10 direccion: que almacenaría una cadena de caracteres de hasta 45

Las inserciones de nuestro ejemplo van bien y sin problemas, hasta que insertamos la columna direccion (que conste no es un error ortográfico, el nombre de la columna es direccion sin tilde). Como seguramente habrán notado, la dirección que intentamos insertar es de más de 45 caracteres. ¿Qué ocurrió? Sencillo, MySQL tiene una definición de una columna y respetará esa decisión hasta el final (¿no sería genial que algunos personajes de la vida pública hiciesen lo mismo?), cualquier intento de insertar más 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 sucesión de eventos memorables, siempre. Hasta Pronto.

MANUAL DE MySQL. SELECCIONAR DATOS

SELECCIONAR o no SELECCIONAR, esa es la cuestión.

Hola, ¿cómo les va?

Tal y como lo prometimos, en esta lección 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 más se llevan a cabo en el trabajo con las bases de datos. Tiene sentido si lo analizamos con cabeza fría:

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 código de barras, e inmediatamente la computadora o la caja registradora sabe perfectamente el producto que estamos llevando y su precio.

Pregunta del millón, ¿qué proceso está llevando a cabo la computadora o caja registradora? Cooooooooorrrrrrrectoooooooooo, está seleccionando datos a partir de un código, a saber: El código de barras.

Antes de continuar con nuestra explicación del proceso de seleccionar, recordemos por favor que, una práctica necesaria para trabajar con bases de datos relacionales, es la de crear una llave o código común en las tablas que han de tener relación. Para el ejemplo que estamos presentando, obviamente la llave o código debe ser el código de barras. Otra pregunta, ¿podríamos almacenar la descripción del producto junto con el código de barras y su precio? Bien la respuesta es, se puede, pero no se debe, ¿la razón?, pues es algo que se llama “normalización” de una tabla, y es algo que tiene que ver, por decirlo de alguna forma, con la agrupación de los elementos más comunes a los datos que guardamos en una tabla. ¿Hay algo más cambiante que un precio? La triste respuesta es NO, por consiguiente, lo más recomendable sería 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 básica:

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 código de barra lanza el siguiente código “0245f0124n01214”, la sentencia SELECT que podría 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 suposición bastante global, pero podría estar muy acertada.

En fin, veamos en acción a la sentencia SELECT, ¿les parece?

Antes de finalizar nuestro encuentro, aclaremos un par cosillas del vídeo:

- La condición 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 carácter comodín asterisco (*), el cual le dice a MySQL que seleccione TODAS las columnas del tabla uno, en donde se cumpla la condición (y siendo que no hay condición alguna, la sentencia selecciona literalmente a todas las columnas sin excepción alguna)

A lo largo de nuestro curso aprenderemos a utilizar la sentencia SELECT con un poco más de detalle, por el

momento, con esta leve degustación ya tienen para hacer algunas cosas entretenidas.

En nuestra siguiente lección 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 enseñas a pescar, le nutrirás toda la vida” (Lao Tsé) Recuerden amigos, esto, es sólo la forma en la que tenemos que pescar.

MANUAL DE MySQL. 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 más en esta lección, ocasión por demás fabulosa para celebrar la vida.

Las modificaciones, así como las adiciones y el borrado, representan la columna vertebral de la evolución 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 actualización de las bases de datos es, por ejemplo, la actualización de los precios de los productos en venta en un supermercado (claro, a todos nos encantaría que dicha actualización fuese para bajar precios en lugar de para subirlos) En el caso del supermercado, la actualización es una de las tareas más importantes en la vida de sus bases de datos. ¿Cómo se sentirían 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 años? Exacto, esa misma sería 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 = expresión WHERE condicion.

Antes de ver en acción la sentencia UPDATE, permítannos una observación de vital importancia. Como se darán cuenta, en todas, o en la gran mayoría de las sentencias en MySQL existe la posibilidad de utilizar la condicionante WHERE. Esta condición es en realidad una de las sentencias más 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 más protagonismo) que la sentencia que la utiliza. Así pues queridos amigos, por favor, entiendan a la perfección 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 modificación en acción. Esperamos que les sirve de mucho lo que hemos aprendido. En nuestra próxima lección vamos a aprender cómo 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 demás son inútiles" Recordemos siempre que nuestras pasiones deben tener la virtud del encanto, de lo contrario, las pasiones,

se convierten en obligaciones

MANUAL DE MySQL. BORRADO DE DATOS

¡Hola, que bueno tenerlos de regreso!

¿Se imaginan lo que podría pasar si un registro de votantes no sacase a las personas que van muriendo año con año? Claro está, la base de datos podría colapsar en un determinado momento debido a la cantidad enorme de datos que se guardarían en ella.

Y, ¿cuál 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 operación por demás delicada y que, debemos poner todos los métodos de prevención para evitar que el usuario borre accidentalmente los datos que NO deberían 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

Observación importante: Si omitimos la condición 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 sería el siguiente:

uno se borre, de tal suerte que si luego hacemos una consulta como: SELECT * FROM

En caso de que necesitemos poner algunos “obstáculos en el camino” del usuario para evitar que los datos sean borrados a troche y moche. Algunas opciones podrían ser un subformulario en JavaScript o una simple página intermedia de PHP que le pregunte al usuario un nombre de usuario y/o una contraseña 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 perdonarán la insistencia patológica en el cuidado al borrar datos, pero créannos, es un verdadero calvario encontrarse con datos borrados por accidente, todo gracias a que no supimos poner un filtro para nuestro querido usuario.

Bueno, después de haberle pedido al usuario hasta el acta de defunción 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 sabiduría. Hasta Pronto

MANUAL DE MySQL. SELECCIÓN INEXACTA

No les ha ocurrido que de cuando en cuando no están seguros de si un nombre se escribe de tal o cual forma. Por ejemplo, el nombre Andros (nombre griego que significa Hombre) podría confundírsenos con el nombre Andrés 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 búsquedas no exactas. La palabra LIKE en inglés 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 continuación 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 búsqueda como tal; signo de porcentaje de nuevo; y comillas simples para cerrar la sentencia. Cualquier error en esta sintaxis, ocasiona un error.

Además, recuerden siempre de NO poner un signo de igual después de la condición WHERE, ya que también proporcionará un error.

Veamos ahora la forma en la que la sentencia LIKE es utilizada, además 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 lección aprenderemos a ALTERAR algunas cosas en una tabla. Por el momento recuerden lo que dijo Lucio Anneo Séneca: “La vida es como una leyenda: no importa que sea larga, sino que esté bien narrada”

MANUAL DE MySQL. ALTERAR

Hola a todos y todas, ¿cómo están?

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 través del ADN como un terror instintivo de cualquier programador o encargado de una base de datos. Claro está, este temor no es infundado, no señor. El temor se deriva de una serie de razones, para mencionar alguna, imaginen ustedes lo que sucedería si, una vez creada la base de datos, insertados una cantidad considerable de datos y teniendo nuestra aplicación 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 razón. Si la aplicación que utiliza nuestra base de datos contiene una cantidad igualmente enorme de llamadas a nuestra base de datos (específicamente a la tabla a la que le cambiamos el nombre), entonces nuestra aplicación está llamando a una tabla que ya no existe (al menos, no existe nunca más con el nombre que le dimos en un prinicpio), por lo que nuestra aplicación (o nuestro motor de base de datos) nos enviará un mensaje de error diciendo que la base de datos no existe más y que nuestro puntero está apuntando (perdón por la obvia redundancia) a un valor nulo (NULL en la mayoría de las veces).

Todo lo anterior se traduce, como ya seguramente lo habrán adivinado en una cacería de brujas dentro del código de la aplicación que hace las llamadas a la tabla a la que le hemos cambiado el nombre. Lo que implica una cantidad de tiempo invertido (que podría de hecho ser tiempo perdido) en una tarea que no hubiese sido necesaria si simplemente no le hubiésemos cambiado el nombre desde un principio a nuestra tabla.

Muy bien, después 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:

ALTERAR el balance del universo de nuestra base de datos: En nuestro ejemplo vamos a utilizar

En nuestro ejemplo vamos a utilizar algunas de las capacidades de la sentencia ALTER, conforme avancen sus necesidades, aprenderán 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 enseñanzas de las disciplinas espirituales orientales, nuestro deber es mostrar todos los caminos posibles. Sin embargo, no está demás hacer de nuevo la advertencia: eviten al máximo utilizar la sentencia ALTER para modificar una base de datos que ya esté llena de información. 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.

MANUAL DE MySQL. LLAVES PRIMARIAS

Una palabra sobre diferenciación. Es necesario asegurarnos de que las entradas en una base de datos puedan ser diferenciadas de otras.

La forma de lograr esto, es a través de lo que suele llamarse una LLAVE PRIMARIA. Lo que una de estas llaves primarias es, es simplemente una distinción (usualmente un número) que nos ayude a distinguir el contenido de una fila de otra, incluso si el contenido de una columna es idéntico 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 vídeo, debemos presentar a unas cuantas sentencias que nos darán 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 continuación:

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 numérico que se incrementará automáticamente 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 botón, vean ahora nuestro vídeo de ejemplo y, posteriormente, el resultado de insertar datos en la tabla que creamos en nuestro vídeo:

Vean a continuación el resultado de insertar datos en la tabla que hemos creado en nuestro vídeo:

datos en la tabla que hemos creado en nuestro vídeo: Muy bien amigos y amigas, esto

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.

MANUAL DE MySQL. OPERADORES EN MySQL

Hola de nuevo. Esperamos que estén muy bien y con toda la disposición del mundo para continuar con nuestro aprendizaje de MySQL.

En MySQL además de llevar a cabo las operaciones con bases de datos, podemos también llevar a cabo operaciones, no sólo con datos guardados en la base de datos, sino también con valores que no necesariamente formen parte de nuestra base de datos.

Todos conocemos las operaciones básicas, es decir: la suma, la multiplicación, la resta y la división. Todas estas operaciones pueden llevarse a cabo sin problemas en MySQL sin necesidad de recurrir a datos que estén guardados en la base de datos.

La forma en la que vamos a hacer dichas operaciones es a través de la sentencia SELECT (otras de las bondades de esta sentencia), de la siguiente forma:

SELECT operación;

Así, la sentencia

SELECT 2+2;

Nos daría como resultado 4 (a que no esperaban una respuesta de este tipo). Con todo, debemos tener cuidado de la precedencia de los operadores, ya que algunos operadores tiene mayor precedencia que otros y, por ejemplo, si hacemos la siguiente operación:

SELECT 5 + 2 * 2;

La respuesta no será 14 (teniendo que cuenta que las operaciones se realizan de izquierda a derecha), sino que será 9, ya que la multiplicación tiene prioridad sobre la suma (lo cual podría tomarse como una especie de racismo matemático, pero por fortuna eso, en las sabias e inteligentes matemáticas, no existe).

Finalmente, y antes de ver a los operadores en acción, mencionemos un operador nuevo (al menos en cuanto a las operaciones matemáticas se refiere), este es, el operador Módulo (%). Para aquellos conocedores de C, C++ o PHP les será muy conocido nuestro viejo amigo Módulo. Este operador proporciona el residuo de un cociente, por ejemplo, la operación:

SELECT 6 % 4;

Nos da como resultado 2, siendo que el residuo de la división entre 6 y 4 es 2. Si lo que se están preguntando es la utilidad de este operador, en realidad depende de las necesidades de cada aplicación o de cada operación que necesitemos efectuar con nuestra base de datos.

Ahora sí queridos amigos, veamos el resultado de hacer operaciones con MySQL:

En nuestra siguiente lección vamos a ver operaciones lógicas en MySQL, por el momento, quédense con las palabras del maestro Joaquín Sabina: “El gobierno si yo fuera presidente, no dudaría tanto en hincarle el diente, al ruido de sables que hay cada mes, que se cruzan los cables del coronel” ¿Qué tal? ¡Sabina para presidente!, ¿no les parece? Hasta Pronto.

MANUAL DE MySQL. OPERADORES DE COMPARACIÓN

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

Los operadores comparativos son útiles a nivel de programación 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 programación, es decir, si las comparaciones (les decir, las operaciones comparativas) resultan verdaderas, el valor retornado es 1; por el contrario, si la comparación resulta falsa, el valor retornado es 0.

La forma de llevar a cabo las comparaciones es a través de la sentencia SELECT, de la siguiente forma:

SELECT operación comparativa;

Las operaciones comparativas que podemos llevar cabo son:

La operación de igualdad: 8 = 8

La operación Mayor que: 7 > 3

La operación Menor que: 4 < 15

La operación Mayor o igual que: 3 >= 3

La operación Menor o igual que: 10 <= 5

La operación No es igual a: 10 ¡= 3 ó 3 <> 2

La operación Null: 7 <=> Null (La expresión null, recuerden, no es igual a 0, null es un valor que no ha sido “programado” aún, lo cual no significa necesariamente que esté vacío, sino que es un valor que no está definido aún) Una observación importante, es que si decimos que 7 = Null, el resultado no será cierto o falso (1 ó 0), sino que resultará en que la expresión entera se convierte en null, por tal razón, debemos utilizar el operador especial para la sentencia NULL < = >.

Finalmente, veamos cómo 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.

MANUAL DE MySQL. OPERACIONES CON CADENAS

Los operadores de cadenas trabajan de manera muy similar a los operadores lógicos de la lección anterior, es decir, retornan un valor de cierto o falso (valor booleano)

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

SELECT ‘cadena’ operador ‘cadena’;

Por favor presten atención a lo que encierra a ambos valores de cadena, es decir a las comillas simples. Lo que las comillas simples hacen, como seguramente ya habrán 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’;

Retornaría un valor de 1, es decir verdadero.

Por otro lado, si la expresión escrita fuese:

SELECT me llamo Juan = me llamo Juan;

El resultado sería el siguiente:

Juan = me llamo Juan; El resultado sería el siguiente: Como verán, es un error cruel

Como verán, es un error cruel y gráficamente mortificante (créanlo, cuando a las 3 de la madrugada, después 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’;

Retornaría 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 comodín hace, como en un juego de póker (perdón si no son tahúres como nosotros), es reemplazar o bien un carácter o bien la cadena completa.

Los caracteres que utilizamos como comodines pueden ser:

El símbolo sustituto de un solo carácter, el cual es el guión bajo (‘_’)

O

el símbolo que sustituye la cadena completa, o el resto de la cadena a partir de donde ponemos el símbolo,

el

cual es el símbolo de porcentaje (‘%’)

Después de todo lo expuesto, veamos el comportamiento de los operadores de cadena, ¿les parece?

En nuestra siguiente lección queridos amigos, veremos los operadores lógicos 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 informática, es esa, debemos percatarnos de todo.

MANUAL DE MySQL. OPERADORES LÓGICOS

Los operadores lógicos en MySQL nos permiten combinar más de una expresión, y obtener un resultado booleano, es decir cierto o falso (1 ó 0 respectivamente).

Tal y como vimos en nuestra lección 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 utilización de los operadores lógicos, siendo que podemos utilizar más de una expresión.

Así por ejemplo, la expresión:

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 lógico OR, el cual decide de entre la evaluación de una expresión O la evaluación de otra.

Una observación importante, es que en MySQL, al igual que en muchos lenguajes de programación como C o C++, los operadores lógicos pueden escribirse con base en símbolos. Dicho lo anterior, observen que la expresión 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 español), el cual, al contrario del operador OR, EXIGE que ambas expresiones comparadas sean verdaderas, de tal manera que la expresión anterior, aplicada al operador AND nos daría un valor falso (0), la razón es que 12 = 12 es cierto, pero 28 = 115 no lo es. Recordando, ambas expresiones TIENEN que ser verdaderas, de lo contrario, la expresión 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 lógico es el Operador de Negación, el cual, en realidad revierte la evaluación de las expresiones que estamos evaluando (¿mareados?, no se preocupen, nosotros también)

A nivel matemático debemos recordar que la negación de la negación es, en realidad una afirmación (así pues, si la mujer de nuestros sueños nos dijese “no, no te quiero”, podemos hincarnos y cantar aleluya)

Para aclarar un poquito este operador, veamos la siguiente expresión:

SELECT NOT (3 = 6);

La evaluación normal sería obviamente falsa, sin embargo, siendo que estamos anteponiendo el operador lógico NOT, la evaluación resulta verdadera. Razón, lo falso de los falso,… es lo verdadero.

El símbolo para sustituir la sentencia NOT es el signo de cerrado de exclamación (!).

Ahora, después de saber cuales son los operadores lógicos que podemos utilizar en MySQL, veamos un ejemplo visual:

Muy bien queridos amigos, no nos queda más que decirles que en nuestra siguiente lección vamos a ver las expresiones regulares en MySQL; y que además necesitamos que no olviden lo que dijo Julios Marx (Groucho): “Encuentro la televisión muy educativa. Cada vez que alguien la enciende, me retiro a otra habitación y leo un libro” Los comentarios, se los dejamos a ustedes. Hasta Pronto.

MANUAL DE MySQL. EXPRESIONES REGULARES

Hola a todos.

En esta nueva entrega vamos a explicar la parte básica 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 más posible.

Las expresiones regulares son una herramienta poderosa que nos ayuda a seleccionar expresiones de una manera general. Podríamos ver a las expresiones regulares como una enorme extensión de la expresión LIKE, que ya vimos en una lección anterior. Decimos que es una extensión debido a que podemos incluir una serie de operadores lógicos que nos ayudarán a hacer de nuestra selección una selección más 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 botón:

SELECT ‘rumpelspinskin’ REGEXP ‘k’;

La sentencia anterior nos daría como resultado un valor de 1, lo cual implica que es un resultado verdadero. ¿Quién nos dice por qué? De acuerdo, el muchacho de la camisa café con rombos rojos (un aplauso al que haga juego con nuestra descripción) 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 evaluación en este caso también resulta verdadera, dado que la barra vertical le dice a MySQL que evalúe si existe una expresión O la otra. Si por ejemplo la sentencia hubiese sido REGEXP ‘a|z’, entonces la expresión hubiese sido evaluada como falsa (0). Una observación que se hace necesaria, es que no importa si la evaluación incluye más de una palabra, de tal manera que si la expresión 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 expresión evaluada.

Podemos evaluar, de igual manera, el hecho de si la expresión regular comienza con un carácter específico, utilizando en la evaluación el circunflejo (^), de la manera siguiente:

SELECT ‘El perfume’ REGEXP ‘^E’;

Con la expresión anterior, el resultado sería cierto (1), dado que la expresión comienza con el carácter ‘E’

La contraparte del circunflejo viene a ser el signo de dólar ($), el cual le advierte a MySQL que la expresión regular que deseamos evaluar debe ser el carácter final, de la siguiente manera:

SELECT ‘Karamazov’ REGEXP ‘v$’;

Esta expresión retornaría un valor verdadero, dado que la expresión comparada finaliza con el signo de dólar.

Si nuestras necesidades se encaminan a comparar solamente el primer y el último carácter de nuestra expresión, podríamos utilizar un carácter comodín, de la siguiente forma:

SELECT ‘Karamazov’ REGEXP ‘^K.+v$’;

Por favor obseren que la expresión de evaluación es ‘^K.+v$’, y que inmediatamente después de la K hay un punto, esto es importante, pues le dice a MySQL que busque la expresión regular cuyo inicio sea la letra “K”, el siguiente carácter sea cualquiera, los siguiente caracteres (sin importar su número) sean cualesquiera y el carácter final, sea la negra “v”

En nuestro siguiente encuentro, vamos a aprender un poquitín más sobre expresiones regulares, por el momento, disfruten de la vida, ríanse de ella y Hasta Pronto.

MANUAL DE MySQL. EXPRESIONES REGULARES 2

Hola de nuevo amigos y amigas. En esta nueva lección vamos a seguir aprendiendo sobre expresiones regulares, haciendo que todo se vuelva más interesante.

Para hacer que MySQL evalúe partes muy específicas de una expresión, podemos hacer uso del siguiente truco (en realidad es simplemente una construcción de MySQL, lo del truquito es sólo un decir)

Digamos que lo que deseamos es averiguar si la expresión regular “rren” se encuentra en la cadena “Rápido corren los carros por el ferrocarril”

¿Qué hacemos? Utilizamos la siguiente evaluación:

SELECT “Rápido corren los carros por el ferrocarril” REGEXP ‘[rren]’;

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

Por otro lado, si deseásemos, por ejemplo, hacer un rango de evaluación, bastaría con incluirlo dentro de los corchetes, de la siguiente manera:

SELECT ‘alskjdhasjkdhasljkdhas’ REGEXP ‘[a-z]’;

Lo anterior basta para que la expresión sea evaluada como verdadera, debido que estamos especificando un rango extenso entre la a y la z. Sin embargo, bastaría con incluir un número (perdón, un dígito) para que la expresión sea evaluada como falsa. Por otro lado, la expresión:

SELECT ‘lksjfsdfsdlfsdjlsfd45646465lkashdakshdkas’ REGEXP ‘[a-z0-9]’;

Sería 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 agrupación a la hora de hacer una consulta. De momento, quédense 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.

MANUAL DE MySQL. ORDENANDO

¡Salud y amor para todos! (lo del dinero depende de sus gustos)

En este nuestro nuevo coloquio, vamos a aprender a hacer consultas más complejas, gracias a los criterios de agrupamiento que existen.

Esto de los criterios de agrupamiento son en realidad una delicia semántica 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, sería 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 presentaría 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 después del nombre de la columna que queremos que sea el parámetro 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 específica.

Ahora, veamos en acción la sentencia ORDER BY, la cual tratamos de explicar con detalle en nuestro siguiente vídeo:

En nuestra siguiente lección, aprenderemos a limitar los resultados de una consulta. Por el momento cuídense mucho y… Hasta Pronto.

MANUAL DE MySQL. LIMITANDO UNA CONSULTA

Buen día a todos.

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

Antes de explicar como se hace, permítannos darles un ejemplo de “para que se hace”. Supongamos por un momento que estamos desarrollando una aplicación 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 página HTML (como sería el caso de una aplicación en PHP). Lo anterior no parece de mayor importancia, pero pensemos por un momento en la presentación de la información 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 tendría la oportunidad de ver las primeras líneas presentadas en la pantalla, siendo que los datos se presentaron sin conmiseración alguna ni límites.

No es adorable como se iluminan los ojos cuando se comprenden las razones de la existencia de algo (de admitir es que ni políticos ni militares han logrado hacer que nuestros ojos se iluminen).

Muy bien, después de toda nuestra explicación-ejemplo, diremos que la sentencia con la que limitamos la presentación 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 compañía de la sentencia ORDER BY que aprendimos en la lección anterior de la manera siguiente:

SELECT * FROM tabla ORDER BY criterio_de_ordenación 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 próxima lección 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.

MANUAL DE MySQL. 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 relación.

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 inglés). Los tipos de uniones que podemos realizar son

INNER JOINS (Uniones Interiores) y LEFT JOINS (Uniones por la Izquierda).

Las uniones más comunes con las del tipo Interior, es decir, INNER JOINS, las cuales son las más 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 explícitamente la palabra INNER JOIN inmediatamente después, o simplemente escribiendo una coma entre la tabla uno y la tabla dos, posteriormente DEBEMOS especificar una condición “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 podría 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 verán, la forma de especificar las tablas de donde estamos sacando la información es simplemente con un punto (.), especificando primero el nombre de la tabla y posteriormente el nombre de la columna, esto tanto después de la palabra SELECT, como después de la palabra WHERE.

Ahora amigos y amigas, vean la forma en la que se hace un INNER JOIN en nuestro siguiente vídeo:

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.

MANUAL DE MySQL. LEFT JOINS

¿Cómo hacer para que la información de una tabla, sea mostrada junto con la de otra?

La solución es utilizando LEFT JOIN. Los LEFT JOINS (perdón por utilizar las palabras en inglés, pero la traducción de unión izquierda o unión 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 condición, 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 recomendación 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 más, las filas que no concuerden serán ignoradas por MySQL.

Veamos por ejemplo el siguiente vídeo, para que todo lo anterior nos quede claro:

En nuestra siguiente entrega, aprenderemos sobre el agregado de datos. Por el momento, sean felices y Hasta Pronto.

MANUAL DE MySQL. AGREGADO DE DATOS EN UNA TABLA

Una vez más 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 “físicamente” en alguna de las tablas de nuestra base de datos.

¿Para qué podría servir algo como lo que acabamos de mencionar? Supongamos el caso hipotético 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 aplicación genera gracias al motor de base de datos

es un reporte de las órdenes puestas por nuestros clientes muy importantes. Si tuviésemos una columna de

TOTAL tendríamos que duplicar la información (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, podríamos 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 (difícilmente las veamos todas en este curso, pero presentaremos las más importantes y significativas

conforme avancemos), hablamos de la función SUM, la cual devuelve la suma de una expresión. Claro que

la función SUM no es la única que podríamos presentar aquí, pero es la que más 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 olvidársenos 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 sería la columna1). La sentencia GROUP BY, no sólo puede utilizarse en un agregado de datos, sino también en una consulta común y silvestre como las que ya hemos visto.

Antes de ver nuestro vídeo, los dejamos con algunas de las funciones MySQL más utilizadas:

MIN Devuelve el valor mínimo de una expresión MAX Devuelve el valor máximo de una expresión COUNT Devuelve el número 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 vídeo:

Esto es agregado de datos en MySQL, por favor practíquenlo mucho, ya que será su salvavidas en más de una ocasión. Hasta Pronto.

MANUAL DE MySQL. DATOS POR DEFECTO

Hola queridos amigos y amigas.

Uno de los temas, de datos por defecto.

digamos “avanzaditos” en MySQL (que de hecho son temas de SQL puro) es el manejo

Datos por defecto son aquellos que especificamos al momento de la creación de nuestra tabla, aquellos datos por defecto que tal o cual columna mostrará, en caso de que ningún valor sea especificado para ella al momento de hacer una inserción.

Vean el siguiente ejemplo:

momento de hacer una inserción. Vean el siguiente ejemplo: Como vemos, hay ciertos datos que no

Como vemos, hay ciertos datos que no han sido insertados al momento de escribir la sentencia INSERT INTO y 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:

dice DEFAULT , tal y como lo muestra la siguiente imagen: La columna DEFAULT contiene la

La columna DEFAULT contiene la información de valor por defecto que contiene una columna específica, 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 vídeo alteramos nuestra tabla prueba_llave para que almacene un valor por defecto, amén de decirle que ahora no contendrá valores nulos y que sus datos serán decimales. Por favor véanlo:

Muy bien, esto es lo que respecta a datos por defecto (DEFAULT DATA en inglés) y lo que con ellos podemos hacer. Ahora sólo recuerden las palabras de Bob Hope: “La persona que no tiene un corazón caritativo padece del peor de los males cardíacos” Que nuestro corazón esté siempre sano a la hora de compartir nuestro conocimiento. Hasta Pronto.

MANUAL DE MySQL. COLUMNAS DE TIPO ENUMERADO

En esta lección, 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 específicos 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 más 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 específica, 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 podrán ser Ranma 1/2, Inuyasha, Batusai Himura o Son Gokú), de tal manera que al insertar datos en la tabla podríamos hacer lo siguiente:

INSERT INTO clientes (nombre) VALUES (‘Inuyasha’);

Los datos insertados serían, por supuesto, 1 en la columna compra_no e Inuyasha en la columna nombre. Sin embargo, también 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 razón es que definimos la columna nombre del tipo ENUM, la cual ENUMERA los datos que le definimos al momento de la creación y que los referimos luego por medio de, o bien la información específica (en este caso la cadena ‘Inuyasha’) o bien con el entero que haría referencia a este dato (siendo que la cadena ‘Inuyasha’ es la segunda en el orden de enumeración, se puede hacer referencia a ella por medio del entero 2)

En nuestro vídeo, vemos que también podemos crear una tabla de enumeración modificando las especificaciones de la tabla por medio de ALTER TABLE. Vean el vídeo correspondiente:

Esto damas y caballeros es lo que respecta a las columnas de tipo enumerado. Más por venir en nuestras siguientes lecciones. Por el momento amigos y amigas, cuídense mucho y Hasta Pronto.

MANUAL DE MySQL. ASIGNACIÓN DE VARIABLES

Sean bienvenidos y bienvenidas a una nueva lección.

En este nuevo encuentro vamos a aprender como se asignan variables en el entorno de MySQL. La asignación 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 sería el signo de asignación) 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 asignación de variables va muchos más 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 condición;

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 continuación, verán un ejemplo de cómo asignar variables y desplegarlas en pantalla:

Otra de las grandes utilidades de la asignación de variables es cuando hacemos enormes procesos por lotes de comandos SQL, algo que veremos un poco más adelante.

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

MANUAL DE MySQL. LA FUNCIÓN IF

“Decisiones, cada día, alguien pierde alguien gana ave María…”

Una deliciosa canción de Rubén Blades, un panameño genio que debería hacer música por siempre.

En realidad eso de las decisiones es siempre una cuestión 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 mayoría de los lenguajes de programación, se hace con la sentencia IF (que es SI condicionante en español), lo cual sonará más que conocido para la gran mayoría que tenga experiencia en algún lenguaje de programación.

La función IF en MySQL acepta tres argumentos, el primero es la condición en si, el segundo es la operación a llevar se cabo si la evaluación resulta cierta, y el tercero es la operación a efectuarse si la evaluación resulta falsa.

Un ejemplo sencillo de lo anterior sería:

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

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

de lo anterior sería, sin lugar a dudas el siguiente: Obviamente la evaluación de la sentencia

Obviamente la evaluación 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 operación a ejecutar es el despliegue en pantalla de la cadena ‘Es igual’, tal y como lo vemos en la imagen de arriba.

Como es lógico de imaginar, la función 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 función IF para hacer una selección:

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 tendrán uno de Adulto.

Con todo y todo, veamos un ejemplo práctico en nuestro vídeo para que todo quede más claro:

Algo que hemos agregado en este vídeo 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 verán, MySQL se ve cada vez más y más emocionante, quédense con nosotros y se pondrá aún más emocionante. Por ahora, recuerden que no hay que esperar a perder la felicidad para darnos cuenta de que estaba ahí. Cuídense mucho y Hasta Pronto.

MANUAL DE MySQL. 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:

operativos de Microsoft, desde el emulador de DOS : Por favor noten la diferencia entre la

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

DOS ( command prompt ) y la línea de comandos de MySQL: La forma en la

La forma en la que vamos a ejecutar el archivo SQL es mediante la siguiente instrucción:

mysql < nombre_del_archivo

Posteriormente, desde la línea de comandos MySQL podemos verificar que el archivo ha sido ejecutado satisfactoriamente. En el vídeo que les presentamos, ejecutamos un archivo SQL y luego lo vemos desde la línea de comando MySQL para verificar que lo que le hemos dicho a MySQL que haga, realmente haya sido hecho, por favor véanlo:

Las utilidades de este tipo de facilidad que nos brinda MySQL es enorme. Sólo 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 más 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, aún nos faltan muchas cosas que aprender, así que Hasta Pronto.

MANUAL DE MySQL. NORMALIZACIÓN

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 Información.

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

A nivel teórico, diremos que el tipo de relaciones entre tablas pueden ser:

DE UNO A UNO DE UNO A MUCHOS DE MUCHOS A 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 relación 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 perfección una relación de uno a muchos.

Finalmente, los microbios de nuestra mano derecha pueden fácilmente pasar a nuestra mano izquierda, es decir muchos microbios, muchas manos (tranquilos, hasta los que se lavan a diario padecerán los problemas de los microbios), lo que obviamente implica una relación de muchos a muchos.

Antes de proseguir, hay que decir que MySQL no soporta la relación de muchos a muchos, por lo que se hace necesaria la intervención de una tabla intermediaria.

Hemos de decir que todo lo anteriormente mencionado es parte de lo que se conoce como NORMALIZACIÓN, lo cual indica el grado de eficiencia con la que nuestra base de datos está diseñada.

Una vez que nuestras relaciones están definidas, pues, dicho de nuevo hay que saber que tipo de relación 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 normalización.

Debemos tener en cuenta que (y esto es muy importante), las tablas que nosotros definamos en nuestra base de datos, deberán cumplir con todas las necesidades de nuestro usuario final, de nuestro personaje de soporte técnico, de nuestro programador estrella, etc. etc. etc. De tal manera que, debemos preguntarnos si es más eficiente tener una columna repetitiva en una sola tabla, o tener una tabla específica para evitar que, por ejemplo el usuario cometa errores de digitación a la hora de consultar datos y darle la posibilidad de cometer errores de digitación (dedazos para los más eruditos).

Para explicar un poco más 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 más lógico es

tener una pequeña 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.

MANUAL DE MySQL. OPTIMIZACIÓN

A la forma en la que nosotros hagamos una base de datos más eficiente, más fácil de depurar, más sencilla de comprender, más veloz, etc., se le llama OPTIMIZACIÓN.

La OPTIMIZACIÓN no es más que el devaneo intelectual (y moral) de nosotros como diseñadores de la base de datos, en el cual nos hacemos preguntas trascendentales para nuestra filosófica vida de diseñadores 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 diseñar 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 situación de la seguridad se convierte en algo vital en los casos de diseñar bases de datos que serán utilizadas en aplicaciones on line (es decir en el Internet), pero se vuelve algo realmente irrelevante si es que vamos a correr una aplicación en nuestra computadora personal y no la utilizaremos en Internet.

La capacidad de almacenamiento toma importancia exclusivamente cuando diseñamos 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 años.

Finalmente, la integridad de los datos es siempre, algo importante en el diseño de bases de datos.

Así pues, parte de la optimización implica lo siguiente:

Evitar la duplicación (parte de lo que explicamos en nuestra lección anterior)

Evitar la inclusión de columnas de tamaño variable (como VARCHAR y TEXT)

Utilizar los tamaños de columna (o mejor dicho de tipo de datos) más pequeño que nuestras necesidades lo permitan (como SMALLINT)

Utilizar en la medida de lo posible los tipos numéricos sin signo (UNSIGNED) ya que esto aumenta la eficiencia con la que nuestra base ha de trabajar

Utilizar la optimización de las tablas para evitar, como ya dijimos, la duplicación innecesaria de los datos

Considerar la desnormalización de las tablas (es decir, sacrificar la elegancia, para ganar un poco de velocidad), o cual implica, si no hay más remedio, permitir la duplicación o la redundancia de información

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

MANUAL DE MySQL. SEGURIDAD

La seguridad, uno de los mayores retos del siglo XXI, en todos los aspectos, el social, el económico (ay, también el económico) y claro está, también el informático.

MySQL proporciona una gran cantidad de elementos de seguridad, mismos que, claro está, están a nuestra total disposición. Una de estas bendiciones de seguridad son las garantías 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 recomendación es, precisamente, permitir el “abuso” total para con nuestras bases, única y exclusivamente al usuario root (que vendría a ser algo así como el superadministrador). Para garantizar los privilegios a un usuario específico, 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 podría ser la habilidad de hacer consultas (SELECT), la habilidad de actualizar o modificar (UPDATES), la habilidad de insertar información (INSERT) o la habilidad de borrar (DELETE).

La Instrucción GRANT es utilizada una vez que iniciamos una sesión MySQL con el usuario ROOT, es decir, cuando el comando del sistema escribimos lo siguiente:

mysql u root

Una vez dentro de la sesión con el usuario raíz 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 sesión 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 sesión ROOT simplemente digitando EXIT en la línea de comandos de MySQL y entrando luego al usuario específico digitando lo siguiente:

mysql u usuario1 p

De esta manera hemos iniciado una sesión 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 sesión usuario1 hace que MySQL nos pida una contraseña antes de entrar, recordemos que la contraseña especificada fue ‘dejameentrar’, así que escribimos precisamente dejameentrar al momento de entrar a la sesión.

Una vez dentro, al estar en la línea 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 más exactos, cada vez que intentemos hacer algo para lo que nuestro usuario no tiene usuario (recuerden por favor que usuario1 sólo tiene permiso para hacer consultas (SELECT).

Finalmente, podemos solicitarle a MySQL los privilegios de un usuario específico por medio de la sentencia SHOW GRANTS, tal y como lo muestra la imagen:

la sentencia SHOW GRANTS , tal y como lo muestra la imagen: Como verán, esta es

Como verán, 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á más adelante. Hasta Pronto

MANUAL DE MySQL. REVOCANDO PRIVILEGIOS

Otra de las posibilidades de seguridad que tiene MySQL es la de revocar privilegios otorgados a un usuario específico.

Posiblemente se estén preguntando, ¿para qué podríamos querer revocar privilegios que hemos otorgado previamente a un usuario?

Imaginemos el siguiente caso un tanto patético: 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 día, después de una sesión de videojuegos aburridos, el hijo decide hacer uso del poder que su querida mamasita le ha proporcionado.

Entra a su sesión 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 sólo un ejemplo). Estas bases de datos representan “la vida” de la madre del pequeñuelo 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 niño se da cuenta de que todo ha desaparecido, en el preciso momento en el que la madre llega a su casa, el niño observa detenidamente al personaje que acaba de entrar y le dice con toda la inocencia infantil de la que un niño es capaz: “¡¡Mira mamá, sin bases!!”

Muy bien, después de que la madre despierta de su desmayo, decide castigar al querubín revocando los privilegios que le otorgó (amén 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 línea 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á más poderes ni posibilidades de darle más regalitos a su madre.

Esto es todo lo que respecta a REVOCAR privilegios. Más de seguridad en nuestra siguiente lección, por el momento, recuerden lo que dijo Bertrand Russell: “Los científicos se esfuerzan por hacer posible lo imposible. Los políticos 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

MANUAL DE MySQL.EL USO DE LA BASE 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 información que el mismo motor de base de datos utiliza a la hora de trabajar (lo cual podría sonar como si nosotros nos hiciésemos una operación de cerebro con nuestras propias manos, pero la verdad es que funciona).

Las tablas que están contenidas en la base “mysql” son las siguientes:

contenidas en la base “ mysql ” son las siguientes: Y una de las tablas más

Y una de las tablas más utilizadas es la de nombre “user”, la cual contiene la información 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 información de los privilegios que se le han otorgado a un usuario a una base de datos específica.

Volviendo a nuestra tabla “user”, esta contiene, como ya habíamos dicho, toda la información 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 servían para garantizar o revocar privilegios a nuestros usuarios.

Por otro lado, esas operaciones pueden hacerse “manualmente”, mediante la inserción (o actualización 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 añadir datos a la tabla “user” son las siguientes:

Así pues, si deseamos que un usuario específico tenga privilegios sólo de SELECCIÓN, debemos hacer

Así pues, si deseamos que un usuario específico tenga privilegios sólo de SELECCIÓN, 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 más, 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 ENCRIPTACIÓN 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, muchísimo que aprender. Hasta Pronto.

MANUAL DE MySQL. ENCRIPTACIÓN

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

La encriptación en MySQL puede hacerse de dos formas. La primera, que es una forma de encriptación, digamos al azar, que es la forma de encriptación de la que no se puede regresar, es decir, una encriptación 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 léxico florido:

Estamos fritos.

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

La función 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 información. Un ejemplo sería:

utilizada para encriptar la información. Un ejemplo sería: Como también habrán visto, la sentencia DECODE sirve

Como también habrán visto, la sentencia DECODE sirve precisamente para revertir el efecto de encriptación.

Una recomendación es que activen la capacidad de selección en la línea de comando para que puedan luego seleccionar y luego pegar la cadena que ha sido encriptada para el proceso de desencriptación.

La otra forma de encriptación, la que no puede revertirse, se hace por medio de la función md5 de la siguiente forma:

se hace por medio de la función md5 de la siguiente forma: Otra de las formas

Otra de las formas de encriptación, irreversible como md5 es mediante la sentencia PASSWORD, que se hace de manera idéntica a la función 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 encriptación con la cadena encriptada, si esa comparación resulta cierta, entonces MySQL sabe que el password era el correcto.

Con esto sabemos ahora las formas de encriptación que MySQL proporcionar. Más por venir en próximas lecciones, por el momento: Hasta Pronto.

MANUAL DE MySQL. 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 abróchense sus cinturones y empecemos.

En primer lugar, vamos a plantear el problema:

Necesitamos una base de datos que sea capaz de manejar una librería, de la siguiente forma:

El usuario debe ser capaz de añadir 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 género del libro

Para comenzar, debemos definir las entidades de nuestra base, al mismo tiempo que definir las relaciones que habrán de existir en nuestra base. Las entidades que podrían intervenir en nuestra base son

El lector

Nombre del Libro

El género del Libro

El autor (o autores) del libro

Las relaciones entre entidades serían:

autores) del libro Las relaciones entre entidades serían: Estas son las relacione entre las entidades (OJO,

Estas son las relacione entre las entidades (OJO, la línea triple indica " ejemplo, El Libro tiene una relación de uno a muchos con El Género)

a

muchos", lo que significa que, por

En nuestra siguiente entrega, la definición de nuestras tablas y la forma en la que se relacionarán. Por el momento. Hasta Pronto.

MANUAL DE MySQL. UN PEQUEÑO EJEMPLO, PARTE FINAL

Hola una vez más amigos y amigas, en esta entrega veremos la definición de las tablas para nuestro pequeño 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 relación con la tabla Género:

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 relación de la tabla anterior con la tabla que definiremos a continuación, es decir la tabla Género, es que los géneros serán insertados con base a un número entero en la tabla libro, y los géneros como tales, se definirán 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 definición de las tablas de nuestro ejemplo.Con esta definición, podemos empezar a poner en práctica lo que hemos aprendido a lo largo de este curso. En nuestro siguiente encuentro, las consideraciones finales, y el triste adiós.Hasta Pronto.