Funciones y lógica personalizada en MySQL

MySQLMySQLBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo crear y utilizar funciones personalizadas en MySQL. El laboratorio se centra en encapsular lógica reutilizable dentro de tu base de datos mediante la creación de una función para calcular el área de un rectángulo.

Los pasos incluyen conectarse al servidor MySQL, crear una base de datos (si es necesario), definir la función calculate_rectangle_area con parámetros de entrada para la longitud y el ancho, y especificar el tipo de datos de retorno. El cuerpo de la función calcula el área y devuelve el resultado. Los pasos posteriores cubrirán el uso de esta función en una consulta SELECT, la prueba de su salida con datos de muestra y, finalmente, la eliminación de la función.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_database("Database Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/insert("Data Insertion") mysql/BasicKeywordsandStatementsGroup -.-> mysql/delete("Data Deletion") subgraph Lab Skills mysql/use_database -.-> lab-550908{{"Funciones y lógica personalizada en MySQL"}} mysql/create_database -.-> lab-550908{{"Funciones y lógica personalizada en MySQL"}} mysql/create_table -.-> lab-550908{{"Funciones y lógica personalizada en MySQL"}} mysql/select -.-> lab-550908{{"Funciones y lógica personalizada en MySQL"}} mysql/insert -.-> lab-550908{{"Funciones y lógica personalizada en MySQL"}} mysql/delete -.-> lab-550908{{"Funciones y lógica personalizada en MySQL"}} end

Crear una función para calcular un valor

En este paso, aprenderás cómo crear una función en MySQL. Las funciones son una forma poderosa de encapsular lógica reutilizable dentro de tu base de datos. Crearemos una función simple que calcula el área de un rectángulo.

Primero, conectémonos al servidor MySQL. Abre tu terminal y ejecuta el siguiente comando:

mysql -u root -p

Se te pedirá la contraseña de root. Ingresa la contraseña y presiona Enter.

Ahora, creemos una base de datos para trabajar. Si ya tienes una base de datos que quieres utilizar, puedes omitir este paso. De lo contrario, ejecuta el siguiente comando SQL:

CREATE DATABASE IF NOT EXISTS my_functions_db;
USE my_functions_db;

A continuación, crearemos la función. La sintaxis para crear una función en MySQL es la siguiente:

CREATE FUNCTION function_name (parameter1 data_type, parameter2 data_type, ...)
RETURNS return_data_type
DETERMINISTIC
BEGIN
  -- Function body
  RETURN return_value;
END;
  • function_name: El nombre de la función.
  • parameter1, parameter2, ...: Los parámetros de entrada de la función, junto con sus tipos de datos.
  • return_data_type: El tipo de datos del valor devuelto por la función.
  • DETERMINISTIC: Esta palabra clave indica que la función siempre devuelve el mismo resultado para los mismos valores de entrada. Esto es importante con fines de optimización.
  • BEGIN y END: Estas palabras clave encierran el cuerpo de la función.
  • RETURN return_value: Esta declaración devuelve el valor calculado por la función.

Ahora, creemos una función llamada calculate_rectangle_area que tome la longitud y el ancho de un rectángulo como entrada y devuelva su área. Ejecuta el siguiente comando SQL:

CREATE FUNCTION calculate_rectangle_area (length INT, width INT)
RETURNS INT
DETERMINISTIC
BEGIN
  DECLARE area INT;
  SET area = length * width;
  RETURN area;
END;

En esta función:

  • Declaramos dos parámetros de entrada, length y width, ambos de tipo INT.
  • La función devuelve un valor INT, que representa el área del rectángulo.
  • Declaramos una variable local area de tipo INT para almacenar el área calculada.
  • Calculamos el área multiplicando la longitud y el ancho y la almacenamos en la variable area.
  • Finalmente, devolvemos el valor de la variable area.

Para verificar que la función se haya creado correctamente, puedes ejecutar el siguiente comando SQL:

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

Este comando mostrará información sobre la función calculate_rectangle_area, incluyendo su nombre, base de datos y fecha de creación.

Utilizar la función en una consulta SELECT

En este paso, aprenderás cómo utilizar la función que creaste en el paso anterior dentro de una consulta SELECT. Esto te permite aplicar la lógica de la función a los datos recuperados de las tablas de tu base de datos.

Primero, asegúrate de estar conectado al servidor MySQL y utilizando la base de datos my_functions_db (o la base de datos donde creaste la función). Si cerraste la conexión, vuelve a conectarte utilizando:

mysql -u root -p

Luego, selecciona la base de datos:

USE my_functions_db;

Ahora, creemos una tabla llamada rectangles para almacenar la longitud y el ancho de diferentes rectángulos. Ejecuta el siguiente comando SQL:

CREATE TABLE rectangles (
  id INT AUTO_INCREMENT PRIMARY KEY,
  length INT,
  width INT
);

Este comando crea una tabla con tres columnas:

  • id: Un entero autoincrementable que sirve como clave primaria.
  • length: Un entero que representa la longitud del rectángulo.
  • width: Un entero que representa el ancho del rectángulo.

A continuación, insertemos algunos datos de muestra en la tabla rectangles. Ejecuta los siguientes comandos SQL:

INSERT INTO rectangles (length, width) VALUES (5, 10);
INSERT INTO rectangles (length, width) VALUES (7, 8);
INSERT INTO rectangles (length, width) VALUES (12, 3);

Ahora que tenemos algunos datos en la tabla rectangles, podemos utilizar la función calculate_rectangle_area en una consulta SELECT para calcular el área de cada rectángulo. Ejecuta el siguiente comando SQL:

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

Esta consulta recupera las columnas id, length y width de la tabla rectangles, y también llama a la función calculate_rectangle_area con las columnas length y width como entrada. El resultado de la llamada a la función se le da el alias area.

La salida de la consulta será una tabla con cuatro columnas: id, length, width y area. La columna area contendrá el área calculada de cada rectángulo.

Deberías ver una salida similar a esta:

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
+----+--------+-------+------+

Esto demuestra cómo utilizar una función en una consulta SELECT para realizar cálculos en los datos recuperados de una tabla.

Probar la salida de la función con datos de muestra

En este paso, probaremos la salida de la función con diferentes datos de muestra para asegurarnos de que está funcionando correctamente. Insertaremos nuevos datos en la tabla rectangles y luego usaremos la función calculate_rectangle_area para verificar las áreas calculadas.

Primero, asegúrate de estar conectado al servidor MySQL y utilizando la base de datos my_functions_db. Si cerraste la conexión, vuelve a conectarte utilizando:

mysql -u root -p

Luego, selecciona la base de datos:

USE my_functions_db;

Ahora, insertemos más datos de muestra en la tabla rectangles con diferentes valores para la longitud y el ancho. Ejecuta los siguientes comandos SQL:

INSERT INTO rectangles (length, width) VALUES (10, 10);
INSERT INTO rectangles (length, width) VALUES (2, 5);
INSERT INTO rectangles (length, width) VALUES (15, 4);

Estos comandos insertan tres nuevas filas en la tabla rectangles con los siguientes valores:

  • Longitud = 10, Ancho = 10
  • Longitud = 2, Ancho = 5
  • Longitud = 15, Ancho = 4

Ahora, usemos la consulta SELECT con la función calculate_rectangle_area para calcular el área de todos los rectángulos, incluyendo los recién insertados. Ejecuta el siguiente comando SQL:

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

Esta consulta recuperará todas las filas de la tabla rectangles y calculará el área de cada rectángulo utilizando la función calculate_rectangle_area.

La salida de la consulta ahora debería incluir las áreas de los nuevos rectángulos:

+----+--------+-------+------+
| id | length | width | area |
+----+--------+-------+------+
|  1 |      5 |    10 |   50 |
|  2 |      7 |     8 |   56 |
|  3 |     12 |     3 |   36 |
|  4 |     10 |    10 |  100 |
|  5 |      2 |     5 |   10 |
|  6 |     15 |     4 |   60 |
+----+--------+-------+------+

Verifica que las áreas calculadas sean correctas para los nuevos datos:

  • El rectángulo con longitud 10 y ancho 10 tiene un área de 100 (10 * 10 = 100).
  • El rectángulo con longitud 2 y ancho 5 tiene un área de 10 (2 * 5 = 10).
  • El rectángulo con longitud 15 y ancho 4 tiene un área de 60 (15 * 4 = 60).

Si las áreas calculadas son correctas, confirma que la función calculate_rectangle_area está funcionando como se espera. Este paso ayuda a garantizar la confiabilidad de tu función al probarla con diversas entradas.

Eliminar la función

En este paso, aprenderás cómo eliminar la función que creaste anteriormente. Eliminar una función la quita de la base de datos, por lo que es importante estar seguro de que ya no la necesitas antes de eliminarla.

Primero, asegúrate de estar conectado al servidor MySQL y utilizando la base de datos my_functions_db. Si cerraste la conexión, vuelve a conectarte utilizando:

mysql -u root -p

Luego, selecciona la base de datos:

USE my_functions_db;

Para eliminar la función calculate_rectangle_area, ejecuta el siguiente comando SQL:

DROP FUNCTION IF EXISTS calculate_rectangle_area;
  • DROP FUNCTION: Este es el comando SQL utilizado para eliminar una función.
  • IF EXISTS: Esta cláusula evita que se produzca un error si la función no existe. Es una buena práctica incluirla para evitar errores inesperados.
  • calculate_rectangle_area: Este es el nombre de la función que deseas eliminar.

Después de ejecutar este comando, la función calculate_rectangle_area se eliminará de la base de datos my_functions_db.

Para verificar que la función se ha eliminado, puedes intentar seleccionar de la tabla rectangles utilizando la función. Ejecuta el siguiente comando SQL:

SELECT id, length, width, calculate_rectangle_area(length, width) AS area FROM rectangles;

Este comando ahora debería devolver un error porque la función calculate_rectangle_area ya no existe. El mensaje de error será similar a: ERROR 1305 (42000): FUNCTION my_functions_db.calculate_rectangle_area does not exist.

Como alternativa, puedes utilizar nuevamente el comando SHOW FUNCTION STATUS:

SHOW FUNCTION STATUS LIKE 'calculate_rectangle_area';

Este comando debería devolver un conjunto de resultados vacío, lo que indica que la función ya no existe.

Al eliminar la función, la has quitado de la base de datos y liberado recursos. Recuerda eliminar solo las funciones de las que estés seguro de que ya no las necesitas.

Resumen

En este laboratorio, aprendiste cómo crear una función en MySQL para encapsular lógica reutilizable. El proceso implicó conectarse al servidor MySQL, crear una base de datos (si era necesario) y luego definir una función con parámetros de entrada, un tipo de datos de retorno y la palabra clave DETERMINISTIC.

Específicamente, creaste la función calculate_rectangle_area, que toma la longitud y el ancho de un rectángulo como entrada y devuelve su área. El cuerpo de la función incluyó declarar una variable local para almacenar el área calculada y utilizar la declaración RETURN para devolver el resultado.