GENERATED COLUMNS en MySQL

logo_gpsEn esta ocación vamos a hablaros de una nueva funcionalidad que se introduce en MySQL 5.7. Se trata de las columnas generadas o GENERATED COLUMNS. Veamos qué son y como funcionan.

¿Qué son las GENERATED COLUMNS de MySQL?

Se trata de un tipo de columnas que son el resultado de otras dos o más columnas. Estas columnas pueden ser el resultado de operaciones aritméticas como sumas, multiplicaciones, una concatenación de varios campos, etc. Podríamos por ejemplo calcular el IVA o un descuento en una factura o bien podríamos crear un campo calculado que sea el resultado de concatenar dos o más campos como puede ser el nombre y los apellidos.

¿Cómo funcionan?

Para mostraros un ejemplo de como funcionan vamos a crear una tabla de usuarios en la que el nombre y los dos apellidos se introduzcan individualmente y generemos un campo nuevo “usuario” que sea el nombre completo.

CREATE TABLE `usuarios` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nombre` varchar(45) DEFAULT NULL,
 `primerApellido` varchar(45) DEFAULT NULL,
 `segundoApellido` varchar(45) DEFAULT NULL,
 `usuario` varchar(45) GENERATED ALWAYS AS (concat(`nombre`,' ',`primerApellido`,' ',`segundoApellido`)) STORED,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

En el código anterior especificamos el parámetro STORED. Con este parámetro indicamos que se guarden los resultados en la tabla y podamos añadir por ejemplo un índice. Si no especificamos nada por defecto la columna es VIRTUAL. Las columnas de este tipo se generan automáticamente en cada consulta y no permiten la creación de índices.

Para insertar los datos tendremos que ejecutar por ejemplo:

INSERT INTO `pruebas`.`usuarios`
(`nombre`,`primerApellido`,`segundoApellido`) VALUES ('David', 'Moreno', 'González');

Una vez ejecutada la inserción, deberían haberse producido la concatenación de ambos y devolver en el campo “usuario”: “David Moreno González”.

Otra opción que nos permite este tipo de columnas es usar operaciones aritméticas, veamos por ejemplo como aplicar el I.V.A automáticamente a cada artículo esta vez creándolo desde MySQL Workbench:

Si ejecutamos:

INSERT INTO `articulos`(`articulo`,`precio`)VALUES('Pelota de tenis',1);

Comprobaremos que el resultado será de 1,21 tras haber aplicado el 21 % de IVA.

Esperamos que os sea de ayuda. Si te ha gustado esta entrada podrás ver todas nuestras entradas de MySQL aquí.

Un saludo,

Equipo de Base de datos.

Fuentes:

http://www.mysqltutorial.org/mysql-generated-columns/

https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html