Está en la página 1de 4

Tarea: Columnas Generadas

Tarea: Columnas Generadas


Creamos una base de datos y la seleccionamos
Creamos una tabla contacts
Insertamos algunos valores
Hacemos una consulta usando CONCAT
Generamos nuevamente la tabla contacts con una columna autogenerada llamada fullname
Insertamos elementos en la tabla contacts
Columna generada almacenada
Verificando si una columna es generada

Creamos una base de datos y la seleccionamos

CREATE DATABASE columnasgeneradas;


USE columnasgeneradas;

Creamos una tabla contacts


Antes de crearla nos aseguramos de eliminarla en caso exista.

DROP TABLE IF EXISTS contacts;

CREATE TABLE contacts (


  id INT AUTO_INCREMENT PRIMARY KEY,
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL
);

Insertamos algunos valores

INSERT INTO contacts


(first_name, last_name, email)
VALUES
('Roger', 'Ramos', 'rogrp6@gmail.com'),
('Diego', 'Ramos', 'difer6@gmail.com');

SELECT * FROM contacts;


Hacemos una consulta usando CONCAT
Esto es para obtener una columna que contenga el valor de first_name y last_name
concatenados con un espacio en el medio.

SELECT
  id,
  CONCAT(first_name, ' ', last_name),
  email
FROM
  contacts;

Generamos nuevamente la tabla contacts con una columna


autogenerada llamada fullname

De esta manera cada vez que insertemos una nueva fila, el valor de la columna fullname se
generará automáticamente concatenando el valor de firts_name y last_name con un espacio
en el medio.

Antes de crear la tabla nos aseguramos de borrar la existente con DROP TABLE

DROP TABLE IF EXISTS contacts;

CREATE TABLE contacts (


  id INT AUTO_INCREMENT PRIMARY KEY,
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  fullname varchar(101) GENERATED ALWAYS AS (CONCAT(first_name,'
',last_name)),
  email VARCHAR(100) NOT NULL
);

Insertamos elementos en la tabla contacts

INSERT INTO contacts


(first_name, last_name, email)
VALUES
('Roger', 'Ramos', 'rogrp6@gmail.com'),
('Diego', 'Ramos', 'difer6@gmail.com');

SELECT * FROM contacts;


Como podemos ver el valor de la columna fulname se generó automáticamente, este tipo de
columna generada se conoce como virtual ya que en realidad esta columna no ocupa espacio
sino que su valor se calcula sobre la marcha cuando se hace una consulta que requiera mostrar
esta columna.

A continuación se verá un ejemplo con columnas generadas almacenadas las cuales en


comparación a las columnas generadas virtuales sí ocupan espacio.

Columna generada almacenada

Como se mencionó, este tipo de columna generada a comparación de la columna generada virtual,
sí ocupa espacio.

Para este ejemplo seleccionaremos la base de datos classicmodels y a continuación


añadiremos una columna generada llamada stockValue el cual tendrá el valor de buyprice
multiplicado por el valor de quantityinstock e indicaremos que es una columna generada
almacenada añadiendo STORED .

USE classicmodels;

ALTER TABLE products


ADD COLUMN stockValue DOUBLE
GENERATED ALWAYS AS (buyprice*quantityinstock) STORED;

SELECT
  productName,
  ROUND(stockValue, 2) stock_value
FROM
  products;

Verificando si una columna es generada

Podemos lograr esto con DESCRIBE

USE classicmodels;
DESCRIBE products;
USE columnasgeneradas;
DESCRIBE contacts;

Podemos observar en el valor de Extra para stockValue que es STORED GENERATED y para
fullname es VIRTUAL GENERATED .

También podría gustarte