En 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