MySQL I – Guía de Inicio

 

Introducción

Esta entrada es la primera de varias de ellas, donde trataré en menor o mayor profundidad cada una de las partes de las que se compone MySQL, empezando por la creación de tablas hasta la programación de procedimientos y triggers.

 

Instalar MySQL en Linux (Debian)

Si no se quiere instalar MySQL en la propia máquina, se puede levantar una máquina virtual donde instalar dicho servicio en su interior.

Requisitos:

  • Virtualbox
  • Vagrant

 

Crear o editar el siguiente fichero:

Añadir la siguiente línea:

Guardar el cambio, slair y actualizar el paquete:

Instalar virtualbox:

Instalar vagrant:

 

Crear el fichero Vagrantfile:

Levantar la infraestructura necesaria, para ello ejecutar la siguiente instrucción:

Para conectar vía ssh con la máquina:

Actualizar los paquetes del sistema operativo (Debian Stretch) de la máquina virtual:

Añadir el PPA de MySQL e instalarlo:

Instalar el servicio de MySQL:

Reiniciar el servicio para aplicar el cambio anterior:

 

Línea de comandos

Conectar con el servidor:

Una vez conectado, se pueden listar las bases de datos que se encuentran en su interior, de serie vienen algunas bases de datos donde se almacena información del servidor y de mysql en sí:

En MySQL es posible crear diferentes bases de datos, dando la posibilidad de tener una base de datos por aplicación o simplemente para hacer pruebas y no afectar a una base de datos determinada.

Crear una nueva base de datos:

Si se desea conectar a una base de datos para posteriormente realizar operaciones sobre ella, es necesario ejecutar el siguiente comando:

O para eliminar una base de datos (perdiendo así todos los datos que hubiera dentro de ella)

 

Creación de tablas

Una vez se esta conectado a una base de datos, es posible empezar a crear tablas, aunque esto no tiene porque ser así. Es posible crear tablas sin necesidad de haberse conectado manualmente a una base de datos predeterminada.

Si se intenta crear una simple tabla sin haber seleccionado previamente una base de datos, arroja el siguiente mensaje:

Por tanto, a la hora de crear las tablas es recomendable indicar el nombre de la bases de datos también.

Tablas temporales

Son tablas que solamente existen en la sesión actual y automáticamente será eliminada al cerrar dicha sesión.

Si pruebas a listar las tablas de la base de datos “test”, no verás la tabla creada:

Pero si existen en la sesión actual en la que se ha creado dicha tabla y se puede consultar la definición de la tabla o los datos introducidos anteriormente:

Clonar una tabla

Es posible clonar la definición de la tabla incluyendo sus indexes y los atributos de las columnas (no incluye los datos).

Si se consulta los datos de la tabla nueva, no han sido copiados de la tabla original:

Copiar una tabla

En este caso es exactamente lo mismo que el caso anterior, pero esta vez incluye los registros que tuviera la tabla:

Eliminar una tabla

Para ello simplemente ejecutar la siguiente instrucción, adaptando el nombre de la tabla:

 

Columnas y tipos de datos

Como ya se ha podido ver en el apartado anterior, las tablas se componen de columnas y estas a su vez tienen asociado un tipo de formato en el que se va almacenar el dato en cuestión, además de los atributos asociados a la columna.

Los tipos de datos se diferencian en:

Numéricos

He descartado algunos como tinyintsmallintmediumintbigint. Ya que normalmente no los suelo usar y básicamente se diferencian en el rango de número que te permite almacenar en ese campo.

  • INT: es el tipo de dato que se suele utilizar de manera general, el cual puede ser negativo o positivo. Teniendo el siguiente rango en el caso de que se haya definido como “signed”, desde –2147483648 a 2147483647. Y si no fuera así el rango de números posibles abarcaría desde hasta 4294967295. Se puede especificar un número de hasta 11 dígitos.
  • FLOAT(M,D): del tipo punto flotante, donde en el valor de se indica la longitud máxima del número y en el valor de se indica la cantidad de número forman la parte decimal. Si no se indican estos valores, por defecto se define como float(10,2).
  • DECIMAL(M,D): exactamente igual que float, se suele utilizar cuando la parte decimal sean decimales exactos.

Fechas y tiempo

  • DATE: son para fechas en el siguiente formato “YYYY-MM-DD”, entre 1000-01-01 y 9999-12-31.
    • Ejemplo: “1999-08-21”.
  • DATETIME: este tipo incluye la hora a la fecha y tiene el siguiente formato “YYYY-MM-DD HH:MM:SS”, entre 1000-01-01 00:00:00 y 9999-12-31 23:59:59.
    • Ejemplo: “1999-08-21 13:30:00”.
  • TIMESTAMP: el formato es como el datetime, pero sin los guiones “YYYYMMDDHHMMSS”, abarca desde el 1 de enero de 1970 hasta aproximadamente el 2037. El 30 de Diciembre de 1973 a las 3:30 de la tarde se definiría de la siguiente forma:
    • Ejemplo: “19731230153000”.
  • TIME: para almacenar el tiempo en el siguiente formato “HH:MM:SS”.
  • YEAR(M): almacena el año en formato de 2 o 4 dígitos, según se especifique como valor de M. En el caso de especificar 2, el año podría estar entre 1970 2069 almacenado como (70 69). Por defecto la longitud es de 4 y abarca desde 1901 2155.

Cadenas

La mayoría de los datos que se almacenan en una base de datos suelen ser del tipo string y se puede identificar a los tipos de datos más usados:

  • CHAR(M): es básicamente una cadena de tamaño fijo, abarca entre 255 caracteres de longitud, el margen de la derecha se rellenarán de espacios, en caso de que la cadena que se almacene no tenga el tamaño fijo predeterminado. La longitud no es necesaria, por defecto tiene como valor 1.
  • VARCHAR(M): abarca también entre 255 caracteres, en este caso si es necesario indicar una la longitud máxima de la cadena.
  • BLOB TEXT: es un campo con un máximo de 65535 caracteres, la traducción de BLOB viene a ser “objetos binarios grandes” y como su nombre indica sirve para almacenar datos en formato binario, como imágenes o otros tipos de ficheros. La diferencia entre blob text es que blob es capaz de distinguir entre minúsculas y mayúsculas.
  • ENUM: sirve para definir una lista de items, y tiene el siguiente formato “ENUM (‘A’, ‘B’, ‘C’)”. Lo que fuerza a que el valor del campo almacenado se encuentre en la lista o sea NULL.
    • Ejemplo: ENUM (‘peras’,’manzanas’,’naranjas’).

 

NULL o VACÍO

Un error que se suele cometer al empezar a utilizar MySQL, es la confusión de un campo NULL con una cadena vacía.

Para entender esta parte, se crea la siguiente tabla de ejemplo:

Si se ve la definición de la creación de la tabla, se puede ver como una columna tiene como valor NULL, no y la otra tiene un yes como NULL:

Se introducen dos nuevos registros, en el primero el valor del campo cadena es una cadena vacía y en el segundo el valor del campo es null:

Si se consulta con la condición de que el campo cadena este vació, solo devolverá el registro con id 1:

Por el contrario si se consulta que el campo cadena sea null, solo devolverá el registro con id 2:

Y por último si se consulta que la condición del campo es que sea not null, devolverá el registro con id 1:

 

Borrar contenido de una tabla

Para eliminar solamente los registros de una tabla y no la tabla o definición de la tabla en sí, se utiliza la siguiente instrucción:

 

Claves primaria y Autoincremental

Aunque si sois observadores ya habréis visto estas opciones en la creación de una tabla anteriormente en otro apartado de esta entrada, pero no he especificado que son y para que sirven.

Y es que a la hora de crear tablas, lo ideal es definir al menos una columna como clave primaria, indicándose así que no se va a poder repetir el valor de dicho campo en otra fila.

El argumento auto_increment simplemente sirve para que se generé una secuencia de números que no se repitan entre sí y sea automático. De manera que no sea necesario ingresar ningún valor para ese campo.

Por ejemplo, imagina que se tiene una tabla para usuarios, y la columna principal de dicha tabla es el campo “DNI”, esta información va relacionada directamente con un usuario y no debería repetirse el valor de un DNI ya que obviamente es único.

Cuando se pasa el argumento primary key para una columna, es como si se incluyese también la opción de not null unique. Si se intenta añadir un nuevo registro con un mismo valor de DNI, saltará el siguiente mensaje:

 

Por otro lado para ver como funciona auto_increment, se crea la siguiente tabla de ejemplo:

Y se insertan productos, sin necesidad de introducir un valor id por cada fila:

Si se consultan los registros, se verá como se auto asignan números al campo id de cada producto:

Operadores

En MySQL también existe la posibilidad de utilizar operadores y tener más versatilidad a la hora de realizar operaciones, para hacer pruebas. Se utiliza la siguiente tabla de ejemplo:

Y se insertan los siguientes registros de prueba:

Operadores de comparación

En el siguiente enlace  hay información sobre todas las posibles opciones, aquí se verán algunas más importantes.

Operador igual

Operador mayor que

Operador menor o igual que

Operador no es igual

Coincidencia de patrón

Operadores lógicos

Operador AND

Operador OR 

Utilizando tanto el operador and or priorizando con paréntesis:

 

Update, Order By y Limit

Actualizar el valor de un campo ya existente con la sentencia update:

Ordenar los elementos que hemos recuperado en una consulta:

Ascendente

En este caso, muestra los usuarios por orden alfabético.

Descendente

Y en este ejemplo, ordena los usuarios de menor a mayor en cuestión de años.

Se puede dar el caso, que se necesite solamente a la persona con menor edad de los usuarios y se puede hacer uso de la clausula Limit:

Extra:

 

Esto ha sido todo para una primera toma de contacto, en los próximos días iré subiendo las siguientes entradas correspondientes a esta guía. Una vez subidas, agregaré un enlace en la parte superior de esta misma entrada por cada una de ellas ;).

Autor entrada: CharlieJ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *