1.
- INTRODUCCION A MySQL
Introducción al curso
Multihilos – Multitarea.
Comprendiendo las bases de datos
Una base de datos es un conjunto de datos pertenecientes a un mismo contexto, y almacenados
para su posterior uso.
La mayoría de las bases de datos están en formato digital.
Existen programas llamados sistemas gestores de datos (DBMS), que permiten almacenar y
posteriormente acceder a los datos de forma rápida y estructurada.
Bases de datos relacionales
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 en un standard SQL, el cual es la razón para que las
bases de datos relacionales sean tan comunes.
Podríamos pensar en la bases de datos como en cajas dentro de las cuales hay celdas, y cada una de
estas guarda algo. A estas cajas se les denomina tablas.
Las bases de datos están conformadas por tablas, que son las contenedoras de información.
Las tablas contienen campos, que están conformados por filas y columnas.
Las columnas representan la información genérica de la tabla.
Las filas es donde se guardará la información específica.
El conjunto de datos 102849 + Alejandro + Av Valle 28 + Bogotá + 573023458 formarían una fila,
pues corresponden a una persona específica. Sin embargo Alejandro se guardaría en la columna
Nombre, y Bogotá se guardaría en la columna Ciudad.
Las tablas mantienen comunicación entre columnas, para extraer la información específica de las
filas.
También hay comunicación entre tablas, incluso entre bases de datos.
Las relaciones se fijan conectando las tablas con una línea.
Las líneas apuntan de un campo a otro, y esto establece una relación.
Es decir, la tabla Cliente y la tabla Factura se relacionan por el campo Num_Cliente.
En la tabla Cliente hay un código de cliente (de ahí el número 1). Y si busco este código en la tabla
Facturas, posiblemente el cliente tenga muchas facturas (de ahí el símbolo infinito).
Por ejemplo, en la tabla en la tabla Cliente tenemos en número del cliente, el nombre, la dirección,
la ciudad y el teléfono.
Si quiero saber que facturas tiene este cliente:
Utilizaremos como enlace Num_Cliente.
Con este dato único vamos a la tabla Factura, y buscando por el campo Num_Cliente,
obtenemos el número de facturas (Num_Factura) que tiene este cliente.
Para saber el detalle de la venta:
Se enlazaría la tabla Factura con la tabla Det_factura mediante el campo Num_Factura. Así
por carda factura de la tabla Factura encontrarías “N” detalles de la tabla Det_factura
Luego sería necesario enlazar el campo Cod_Producto de la tabla Det_factura con la tabla
Productos creando así varios enlaces o llaves, que me permitirían saber cuál es el nombre de
los productos que compró el cliente en cada una de sus facturas.
PRIMEROS PASOS
Instalación de MaríaDB-MySQL
Vamos a realizar la instalación de XAMPP, esta es una aplicación que nos permite instalar en nuestro
equipo MariaDB, con los que realizaremos las prácticas de los comandos que veremos.
Ir a Google y teclear: download xampp
Selecciona el primer enlace
Hacer click en 7.3.4 para descargar la última versión de xampp.
Una vez bajado, empezar con el proceso de instalación.
Este mensaje puede salir en tu instalación de Windows, sigue las instrucciones en pantalla para
continuar con la instalación.
A continuación hacer click en Next.
Seleccionar todos los campos por defecto y click en Next. Los componentes opcionales no los
usaremos en este curso.
Seleccionar la carpeta de instalación, en pantalla aparece la carpeta por defecto. Click en Next.
Estamos listos para iniciar la instalación. Click en Next.
Inicialmente se desempaquetan los paquetes de la instalación.
El Firewall de Windows puede bloquear algunas características de la aplicación XAMPP, así que
otorga acceso como se indica en pantalla y Click en Permitir acceso.
Una vez finalizado el proceso de instalación, se puede lanzar el panel de control de XAMPP. Click en
Finish.
Este es nuestro panel de control de XAMPP. Click en Start en la opción Apache. Es posible que otras
aplicaciones como VM WorkStation estén utilizando en mismo puerto que utiliza por defecto XAMPP
para el servidor Apache. En ese caso, utiliza el icono Config para definir otro puerto, o desinstala las
aplicaciones que entren en conflicto.
Una vez finalice el proceso de montaje de las aplicaciones seleccionadas, así deber verse el panel de
control de XAMPP. Es posible que tengas que descargar e instalar algún requerimiento para Tomcat.
Asegúrate que MySQL está arrancado y pulsa el botón Shell para entrar a XAMPP.
Y aparece el Shell de XAMPP para MySQL
Para entrar a MariaDB desde XAMPP, usamos el comando mysql –u root y pulsar enter.
Puedes ver el mensaje de bienvenida y la versión que estamos usando
Para salir, usa los comandos quit para salir de MariaDB, y exit para volver al panel de control.
Mostrar información de la base de datos
Vamos a empezar viendo información de nuestra base de datos de MySQL.
La sentencia show tiene la siguiente sintaxis:
show databases; - Muestra las bases de datos que están guardadas en MySQL.
Nos muestra las bases de datos que hay en esta instalación de MariaDB. Estas son bases de datos
que vienen por defecto en esta instalación.
use nombre_database; - Especifica la base de datos en la que queremos trabajar. Una vez
seleccionada la base de datos, cualquier comando que se teclee, afectará solamente a esa base de
datos.
Observe como indica que la base de datos ha cambiado: “Database changed”.
También se puede ver el nombre de la base de datos en el prompt.
show tables; - Muestra las tablas contenidas en una base de datos específica.
Podemos ver que hay 19 filas (rows), o sea, 19 tablas contiene la base de datos.
show colums from nombre_tabla; - Muestra las columnas contenidas en una tabla específica.
Estos son los campos que contiene esa tabla.
Crear una base de datos
Las bases de datos son colecciones de tablas, que a su vez son colecciones de columnas y de filas, y
estas a su vez, son colecciones de datos.
Antes de crear tablas, columnas y filas, necesitamos crear la base de datos.
create database nombre_database; - Crea una base de datos y le da nombre.
Observamos el mensaje que dice: Query OK, 1 row affected. Esto nos indica que se ejecutó con éxito
el comando.
Ahora verificaremos si realmente se creó la base de datos.
Podemos ver que aparece nuestra base de datos “clientes”. Ahora indicaremos que use esa base de
datos y no muestre las tablas que conriene.
Observamos que la base de datos no contiene ninguna tabla. “Empty set” significa que no hay
resultados, que no hay tablas creadas todavía.
Si el nombre de la base de datos ya existe, MySQL produce un sonido y genera un mensaje de error.
“ERROR 1007 (HY000) No se puede crear la bases de datos ‘clientes’; la base de datos existe”
Podemos evitar ese mensaje de error.
create database if not exists nombre_database; - Esto no hace que la base de datos sea sobrescrita
si ya existe, sino que estamos evitando que MySQL nos muestre un mensaje de error en pantalla.
Por ejemplo: Supongamos que tenemos una aplicación que utiliza nuestro motor de base de datos. A
la hora de utilizar la aplicación, tenemos la necesidad de crear una base de datos en tiempo real,
como cuando un nuevo usuario ingresa en nuestra página web. Si la base de datos ya existe, y no
hemos especificado “if not exists”, esto produciría un error en pantalla del navegador del cliente.
Podemos ver que ya no se produjo un sonido y no generó un mensaje de error. Simplemente nos
dice:
“Query OK, 0 filas afectadas, 1 advertencia”, indicando que no creó la base de datos de nuevo.
Eliminar una base de datos
En ocasiones hay que eliminar alguna base de datos, ya porque se hayan convertido en obsoletas, o
ya no sean necesarias.
Primero veamos las bases de datos que tenemos y vamos a crear una nueva llamada “copia_clientes”.
Ahora verificaremos que se ha creado la base de datos, y la seleccionaremos para ver las tablas que
contiene.
Para borrar una base de datos:
drop database nombre_database; - Elimina la base de datos especificada.
Observamos el mensaje “Query OK”, indicando que el comando se ejecutó correctamente. Después
verificamos que se ha borrado la base de datos y podemos comprobar que la base de datos ha sido
eliminada, y el prompt ha cambiado.
Crear tablas en la base de datos
Para crear tablas, necesitamos utilizar una sentencia SQL. Recordar que antes de utilizar esta
sentencia se debe seleccionar una base de datos, que será la que contenga la tabla que vamos a
crear.
Primero vamos a comprobar que bases de datos tenemos:
Observamos que tenemos la base de datos “clientes”, que es la que vamos a usar.
Seleccionaremos la base de datos y comprobaremos si tiene alguna tabla:
Comprobamos que está vacía.
Una creación básica para una tabla sería:
create table nombre_tabla (campo1 tipo(longitud), campo2 tipo(longitud), campo_n tipo(longitud));
- Creará una nueva tabla en la base de datos.
Crearemos la tabla “Productos” con sus respectivos campos:
- Este símbolo significa que no se ha acabado de editar el comando.
Observamos que el comando se ha ejecutado correctamente. Al no haber filas, solo creó la tabla.
Verificamos que la tabla se ha creado:
Se puede observar que la tabla se ha creado.
Veamos la definición de la tabla:
Vemos las columnas creadas:
El nombre del campo, el tipo de campo, ni permiten datos nulos, si son llaves, y el valor que
contienen por defecto y el campo Extra.
Algunos campos no los hemos definido al utilizar una definición básica.
Eliminar tablas de la base de datos
En ocasiones es necesario eliminar algunas tablas que se han convertido en obsoletas y ya o sean
necesarias.
Primero vamos a comprobar las bases de datos que tenemos:
Podemos ver que está nuestra base de datos “clientes”.
Ahora vamos a seleccionar la base de datos y a mostrar las tablas que contiene:
Vemos que hay una tabla llamada “productos”, la cual vamos a eliminar.
drop table nombre_tabla; - Elimina la tabla especificada.
Observamos que la query se ha realizado con éxito.
Verificamos que la tabla se ha eliminado con éxito:
Y comprobamos que se ha eliminado la tabla.
Tipos de datos para las columnas
En MySQL las columnas pueden tener varios tipos de datos:
Datos numéricos – Diseñado para almacenar datos numéricos, como cantidades, costos,
edades, etc. Para este tipo de datos encontraremos dos categorías:
Números enteros - No admiten números decimales.
Números de coma flotante – Admiten números decimales.
También permiten dos opciones adicionales:
Unsigned – (Sin signo) No permiten números negativos.
Zerofill – Rellena el valor con ceros a la izquierda hasta alcanzar su longitud máxima.
Fecha y hora – Diseñados para almacenar datos referidos a fecha y hora.
Cadenas de caracteres – Sirven para guardar textos.
Binarios – Guarda la información en lenguaje binario y se utiliza para almacenar imágenes,
sonidos y archivos
Bases de datos y tablas
Creación de bases de datos
Comando competo para la creación de base de datos.
create database crea una base de datos con el nombre que le damos, para poder utilizar esta
instrucción debes ser el usuario administrador de MySQL. Si eres un usuario normal, el
administrador debe harte dado previamente el privilegio “create”.
create schema es un sinónimo de “create database”, es decir, puedes usar ambos.
Por lo general ocurrirá un error si la base de datos ya existe y no has utilizado “IF NOT EXISTS”.
La sección “especificación_creación” especifica las características de la base de datos.
La cláusula “CHARACTER SET” especifica el juego de caracteres predeterminado que se
utilizará para la base de datos.
La cláusula “COLLATE” especifica la clasificación predeterminada de la base de datos.
La cláusula “DEFAULT ENCRYPTION” permite definir el cifrado predeterminado de la base de
datos. Este se hereda en las tablas de base de datos.
show databases enumera las base de datos en el servidor de MySQL.
show schemas es sinónimo de “show databases”, puedes utilizar cualquiera de los dos.
La cláusula “like” si está presente, indica que nombres de bases de datos deben coincidir.
La cláusula “where” se puede utilizar para seleccionar filas utilizando condiciones.
show create database muestra solamente las bases de datos para las que se tiene algún tipo de
privilegio. a menos que se tenga el privilegio “show databases”.
show create muestra la creación de la base de datos, se crea con el nombre de la base de datos
proporcionada. Si incluye la cláusula IF NOT EXISTS el resultado también incluirá dicha cláusula.
Entrar en la Shell de MariaDB.
Veamos las bases de datos que tenemos:
Veamos las bases de datos que empiezan con “cli”, teclear show databases like ‘cli%’; utilizando el
símbolo “%” como comodín, ojo a las comillas simples de (’cli%’).
Si tecleamos el comando create database if not exists clientes character set=latin2; vemos que se
ejecutó correctamente pero no hizo nada y no devolvió un “warning”.
Si tecleamos el comando show warnings; este nos muestra el warning anterior que hace referencia
a un código de error “1007” que dice que no puede crear la base de datos porque ya existe.
Tecleamos el comando show create database clientes; que muestra la sintaxis que se usó para la
creación de la base de datos.
Se puede ver el comando usado, y el comentario /*!40100 DEFAULTCHARACTER
utf8mb4_general_ci */ que se usó para la creación de la base de datos.
Creación de tablas
El comando create table crea una tabla con un nombre específico, para ello debes tener el privilegio
“create” para las tablas. Por defecto, las tablas se crean en la base predeterminada y se producirá
un error si la tabla ya existe o si la base de datos no existiera. MySQL no tiene límite en el número de
tablas que puedes crear en tu sistema.
La sintaxis completa y detallada del comando es bastante larga, una 150 líneas, veamos las opciones
más utilizadas:
Temporary – Permite crear una tabla temporal, estas tablas solo serán visibles dentro de la sesión
actual y serán eliminadas automáticamente al cierre de la sesión.
If not exists – Si intenta crear un tabla que ya existe sin especificar esta opción, generará un error en
la pantalla de datos del usuario. Si la tabla ya existe pero utilizamos la opción, no generará ningún
mensaje en la consola del usuario.
En la sección que va entre paréntesis es donde se definen las columnas y los índices que componen
las tablas. Debes tener en cuenta que cada definición de columna se separa con comas, y todas las
columnas se enmarcan con paréntesis de inicio y de final.
Veamos las opciones de las columnas:
definición_columna – Para cada columna, puedes definir las siguientes características:
tipo_dato – Corresponde al tipo de dato ya vistos en la sección anterior.
Not null | null – Permite especificar si la columna puede (null) o no contener valores
nulos (not null). Cuando se realiza una inserción de datos en la tabla especificada como
“not null” y la columna no contiene información, se generará un mensaje de error en
tiempo de ejecución.
Default {literal | (expr)} – Permite definir un valor por defecto para la columna cuando
se realizan operaciones de inserción y no se define un valor específico en el momento
de la ejecución. Por ejemplo, si tienes un campo que almacena la fecha, podrías definir
que el valor por defecto es hoy, así el motor de la base datos asume este valor por
defecto.
Auto_increment – Una columna de tipo entero o de coma flotante puede tener este
atributo. Cuando insertes un valor de “null” o un cero, la columna se establece en el
siguiente valor de la secuencia. Normalmente es el valor “+1”, las secuencias
auto_incrment comiezan con “1”.
Unique [key] – Permite definir que la columna solo puede contener valores únicos, es
decir, que no pueden repetirse.
Primary [key] – Permite definir que la columna va a ser la llave (clave) principal de la
tabla. Hay que tener en cuenta que solo permite definir llaves únicas de un solo campo.
Si quieres definir una llave compuesta por más de un campo, se utilizará otra cláusula.
Comment ‘string’ – Permite definir un comentario para la columna a manera de
documentación.
También pueden definirse los índices de la tabla:
Index | key – Son sinónimos, puedes usar cualquiera de las dos.
nombre_índice - Si no se define un nombre de índice, el nombre será asignado por MySQL.
Tipo_índice – Algunos motores de almacenamiento permiten asignar un tipo de índice al crear
uno.
columna_llave – Aquí se definen las columnas que componen el índice. Las columnas
irán se paradas por comas.
opciones_índice – Se pueden trabajar varios parámetros, por ejemplo, “comment”.
Default – Puedes crear por ejemplo un “character set”: Puedes definir que la tabla tenga un juego de
caracteres específico.
Comment – Comentario a manera de documentación para la tabla.
Taller de creación de tablas
Una vez estando en la Shell, seleccionamos la base de datos llamada “clientes”.
Procedemos a verificar si tenemos alguna tabla en la base de datos.
Nos dice que no hay ninguna tabla en la base de datos “clientes”.
Vamos a crear la tabla “cliente”:
Características de los campos:
Num_Cliente – Tipo integer, not null, auto_increment, y con comentario.
Nombre – Tipo varchar de 30, not null y con comentario.
Direccion – Tipo varchar de 30, not null y con comentario.
Ciudad – Tipo varchar de 20, not null y con comentario.
Telefono - Tipo varchar de 15, not null y con comentario.
Se creará como llave (clave) principal el campo “Num_Cliente”.
La query se ejecuta correctamente.
Verificamos las columnas de nuestra tabla recién creada.
Nos muestra el nombre de los campos, el tipo de datos que tiene cada campo, que no permite
valores nulos, que creó la llave primaria en el campo “num_cliente”, que por defecto los campos
tienen un valor nulo, y que el campo “num_cliente” tiene la opción “auto_increment”.
Para ver también los comentarios añadir la opción “full” al anterior comando:
Ahora pasaremos a crear la siguiente tabla.
Características de los campos:
Num_Factura - Tipo integer, not null, y con comentario.
Num_Cliente - Tipo integer, not null, y con comentario.
Fecha_Factura – Tipo fecha, not null, inserción de fecha actual por defecto, y con comentario.
Valor_Total - Mediumint (numérico), sin signo, not null y con comentario.
Se creará como llave (clave) principal el campo “Num_factura”.
Se creará un índice único de búsqueda con el campo “Num_cliente”, y con comentario.
Primero verificamos que no tenemos una tabla llamada “factura”.
Una vez comprobado, pasamos a crear la tabla.
Verificamos que la tabla ha sido creada.
Verificamos las columnas de la tabla.
Vamos a crear la tabla “Det_Factura”.
Características de los campos:
Num_Factura – Tipo integer, not null, y con comentario.
Cod_Producto – Tipo smallint (numérico), sin signo, not null y con comentario.
Cant_Vendida – Tipo tinyint (numérico), sin signo, not null y con comentario.
Valor_Unitario – Tipo smallint (numérico), sin signo, not null y con comentario.
Se creará como llave (clave) compuesto con los campos “Num_factura, cod_producto”, y con
comentario.
Se creará un índice de búsqueda con el campo “Cod_Producto”, y con comentario.
Verificamos que la tabla ha sido creada y los campos de la tabla.
Vamos a crear la tabla de “Productos”.
Características de los campos:
Cod_Producto – Tipo smallint (numérico), sin signo, not null y con comentario.
Descripcion – Tipo varchar de 60, not null, y con comentario.
Precio_Venta – Tipo smallint (numérico), sin signo, not null y con comentario.
Se creará como llave (clave) primaria con el campo (cod_producto), y con comentario.
Se creará un índice de búsqueda con el campo “descripcion”, y con comentario.
Verificamos que la tabla ha sido creada.
Esquema de base de datos
Vamos a ver cómo se puede visualizar el esquema de la base de datos en MySQL.
show create muestra la instrucción “create database” que creó la base de datos. Si la instrucción
show muestra la cláusula “if not exists”, la salida también incluirá también esta cláusula.
“show create database” y “show create schema” son sinónimos, puedes usar cualquiera de las dos.
Vamos a ver el comando con el que se creó a base de datos “clientes”.
Se puede ver el comando usado, y el comentario /*!40100 DEFAULTCHARACTER
utf8mb4_general_ci */ que se usó para la creación de la base de datos.
Veamos el mismo comando incluyendo la cláusula “if not exists”.
Aparece el comando incluyendo la cláusula “if not exists”.
Interacción con bases de datos