ACTIVIDAD 5-Datos Enum, Set y Blob
Qué son los tipos de datos?
Tomado de: https://www.youtube.com/watch?v=Rhjs2z6WYBA&ab_channel=diegomoissetdeespanes
Enum:
El tipo de dato "enum" representa una enumeración. Puede tener un máximo de 65535 valores distintos. Es una cadena cuyo valor se elige de una lista enumerada de valores permitidos que se especifica al definir el campo. Puede ser una cadena vacía, incluso "null".
Los valores presentados como permitidos tienen un valor de índice que comienza en 1.
Una empresa necesita personal, varias personas se han presentado para cubrir distintos cargos. La empresa almacena los datos de los postulantes a los puestos en una tabla llamada "postulantes". Le interesa, entre otras cosas, conocer los estudios que tiene cada persona, si tiene estudios primario, secundario, terciario, universitario o ninguno. Para ello, crea un campo de tipo "enum" con esos valores.
Para definir un campo de tipo "enum" usamos la siguiente sintaxis al crear la tabla:
create table postulantes( numero int unsigned auto_increment, documento char(8), nombre varchar(30), estudios enum('ninguno','primario','secundario', 'terciario','universitario'), primary key(numero) );
Los valores presentados deben ser cadenas de caracteres.
Si un "enum" permite valores nulos, el valor por defecto es "null"; si no permite valores nulos, el valor por defecto es el primer valor de la lista de permitidos.
Si se ingresa un valor numérico, lo interpreta como índice de la enumeración y almacena el valor de la lista con dicho número de índice. Por ejemplo:
insert into postulantes (documento,nombre,estudios) values('22255265','Juana Pereyra',5);
En el campo "estudios" almacenará "universitario" que es valor de índice 5.
Si se ingresa un valor inválido, puede ser un valor no presente en la lista o un valor de índice fuera de rango, coloca una cadena vacía (en las versiones nuevas de MySQL produce un error y no se inserta). Por ejemplo:
insert into postulantes (documento,nombre,estudios) values('22255265','Juana Pereyra',0); insert into postulantes (documento,nombre,estudios) values('22255265','Juana Pereyra',6); insert into postulantes (documento,nombre,estudios) values('22255265','Juana Pereyra','PostGrado');
Esta cadena vacía de error, se diferencia de una cadena vacía permitida porque la primera tiene el valor de índice 0; entonces, podemos seleccionar los registros con valores inválidos en el campo de tipo "enum" así:
select * from postulantes where estudios=0;
El índice de un valor "null" es "null".
Para seleccionar registros con un valor específico de un campo enumerado usamos "where", por ejemplo, queremos todos los postulantes con estudios universitarios:
select * from postulantes where estudios='universitario';
Los tipos "enum" aceptan cláusula "default".
Si el campo está definido como "not null" e intenta almacenar el valor "null" aparece un mensaje de error y la sentencia no se ejecuta.
Los bytes de almacenamiento del tipo "enum" depende del número de valores enumerados.
Tomado de: https://www.tutorialesprogramacionya.com/mysqlya/temarios/descripcion.php?inicio=42&cod=54&punto=57
Tomado de: https://www.youtube.com/watch?v=pEE1k_8W4z4&ab_channel=diegomoissetdeespanes
Set: El tipo de dato "set" representa un conjunto de cadenas.
Puede tener 1 ó más valores que se eligen de una lista de valores permitidos que se especifican al definir el campo y se separan con comas. Puede tener un máximo de 64 miembros. Ejemplo: un campo definido como set ('a', 'b') not null, permite los valores 'a', 'b' y 'a,b'. Si carga un valor no incluido en el conjunto "set", se ignora y almacena cadena vacía.
Es similar al tipo "enum" excepto que puede almacenar más de un valor en el campo.
Una empresa necesita personal, varias personas se han presentado para cubrir distintos cargos. La empresa almacena los datos de los postulantes a los puestos en una tabla llamada "postulantes". Le interesa, entre otras cosas, saber los distintos idiomas que conoce cada persona; para ello, crea un campo de tipo "set" en el cual guardará los distintos idiomas que conoce cada postulante.
Para definir un campo de tipo "set" usamos la siguiente sintaxis:
create table postulantes( numero int unsigned auto_increment, documento char(8), nombre varchar(30), idioma set('ingles','italiano','portuges'), primary key(numero) );
Ingresamos un registro:
insert into postulantes (documento,nombre,idioma) values('22555444','Ana Acosta','ingles');
Para ingresar un valor que contenga más de un elemento del conjunto, se separan por comas, por ejemplo:
insert into postulantes (documento,nombre,idioma) values('23555444','Juana Pereyra','ingles,italiano');
No importa el orden en el que se inserten, se almacenan en el orden que han sido definidos, por ejemplo, si ingresamos:
insert into postulantes (documento,nombre,idioma) values('23555444','Juana Pereyra','italiano,ingles');
en el campo "idioma" guardará 'ingles,italiano'.
Tampoco importa si se repite algún valor, cada elemento repetido, se ignora y se guarda una vez y en el orden que ha sido definido, por ejemplo, si ingresamos:
insert into postulantes (documento,nombre,idioma) values('23555444','Juana Pereyra','italiano,ingles,italiano'); en el campo "idioma" guardará 'ingles,italiano'.
Si ingresamos un valor que no está en la lista "set", se ignora y se almacena una cadena vacía (versiones nuevas de MySQL no se inserta la fila), por ejemplo:
insert into postulantes (documento,nombre,idioma) values('22255265','Juana Pereyra','frances');
Si un "set" permite valores nulos, el valor por defecto es "null"; si no permite valores nulos, el valor por defecto es una cadena vacía (versiones nuevas de MySQL debe indicarse en la creación el valor default).
Si se ingresa un valor de índice fuera de rango, coloca una cadena vacía. Por ejemplo:
insert into postulantes (documento,nombre,idioma) values('22255265','Juana Pereyra',0); insert into postulantes (documento,nombre,idioma) values('22255265','Juana Pereyra',8);
Si se ingresa un valor numérico, lo interpreta como índice de la enumeración y almacena el valor de la lista con dicho número de índice. Los valores de índice se definen en el siguiente orden, en este ejemplo:
1='ingles', 2='italiano', 3='ingles,italiano', 4='portugues', 5='ingles,portugues', 6='italiano,portugues', 7='ingles,italiano,portugues'.
Ingresamos algunos registros con valores de índice:
insert into postulantes (documento,nombre,idioma) values('22255265','Juana Pereyra',2); insert into postulantes (documento,nombre,idioma) values('22555888','Juana Pereyra',3);
En el campo "idioma", con la primera inserción se almacenará "italiano" que es valor de índice 2 y con la segunda inserción, "ingles,italiano" que es el valor con índice 3.
Para búsquedas de valores en campos "set" se utiliza el operador "like" o la función "find_in_set()".
Para recuperar todos los valores que contengan la cadena "ingles" podemos usar cualquiera de las siguientes sentencias:
select * from postulantes where idioma like '%ingles%'; select * from postulantes where find_in_set('ingles',idioma)>0;
La función "find_in_set()" retorna 0 si el primer argumento (cadena) no se encuentra en el campo set colocado como segundo argumento. Esta función no funciona correctamente si el primer argumento contiene una coma.
Para recuperar todos los valores que incluyan "ingles,italiano" tipeamos:
select * from postulantes where idioma like '%ingles,italiano%';
Para realizar búsquedas, es importante respetar el orden en que se presentaron los valores en la definición del campo; por ejemplo, si se busca el valor "italiano,ingles" en lugar de "ingles,italiano", no retornará registros.
Para buscar registros que contengan sólo el primer miembro del conjunto "set" usamos:
select * from postulantes where idioma='ingles';
También podemos buscar por el número de índice:
select * from postulantes where idioma=1;
Para buscar los registros que contengan el valor "ingles,italiano" podemos utilizar cualquiera de las siguientes sentencias:
select * from postulantes where idioma='ingles,italiano'; select * from postulantes where idioma=3;
También podemos usar el operador "not". Para recuperar todos los valores que no contengan la cadena "ingles" podemos usar cualquiera de las siguientes sentencias:
select * from postulantes where idioma not like '%ingles%'; select * from postulantes where not find_in_set('ingles',idioma)>0;
Tomado de: https://www.tutorialesprogramacionya.com/mysqlya/temarios/descripcion.php?inicio=42&cod=55&punto=58
Blob:
Los tipos "blob" o "text" son bloques de datos. Tienen una longitud de 65535 caracteres.
Un "blob" (Binary Large Object) puede almacenar un volumen variable de datos. La diferencia entre "blob" y "text" es que "text" diferencia mayúsculas y minúsculas y "blob" no; esto es porque "text" almacena cadenas de caracteres no binarias (caracteres), en cambio "blob" contiene cadenas de caracteres binarias (de bytes).
No permiten valores "default".
Existen subtipos:
- tinyblob o tinytext: longitud máxima de 255 caracteres.
- mediumblob o mediumtext: longitud de 16777215 caracteres.
- longblob o longtext: longitud para 4294967295 caracteres.
Se utiliza este tipo de datos cuando se necesita almacenar imágenes, sonidos o textos muy largos.
Un video club almacena la información de sus películas en alquiler en una tabla denominada "peliculas". Además del título, actor y duración de cada película incluye un campo en el cual guarda la sinopsis de cada una de ellas.
La tabla contiene un campo de tipo "text" llamado "sinopsis":
- codigo: int unsigned auto_increment, clave primaria, - nombre: varchar(40), - actor: varchar(30), - duracion: tinyint unsigned, - sinopsis: text,
Se ingresan los datos en un campo "text" o "blob" como si fuera de tipo cadena de caracteres, es decir, entre comillas:
insert into peliculas values(1,'Mentes que brillan','Jodie Foster',120, 'El no entiende al mundo ni el mundo lo entiende a él; es un niño superdotado. La escuela especial a la que asiste tampoco resuelve los problemas del niño. Su madre hará todo lo que esté a su alcance para ayudarlo. Drama');
Para buscar un texto en un campo de este tipo usamos "like":
select * from peliculas where sinopsis like '%Drama%';
No se pueden establecer valores por defecto a los campos de tipo "blob" o "text", es decir, no aceptan la cláusula "default" en la definición del campo
Tomado de: https://www.tutorialesprogramacionya.com/mysqlya/temarios/descripcion.php?inicio=42&cod=78&punto=59
Realizar diapositivas para exposición de 15 minutos:
Descargar el siguiente archivo para realizar la actividad en clase
https://www.dropbox.com/s/ey97wslr8q0kprr/Datos%20enum_set_blob.txt?dl=0
Javier Ospina Moreno. (2023b, septiembre 30). Tipos de datos Enum, Set y Blob [Vídeo]. YouTube. https://www.youtube.com/watch?v=HL9Bv2h8-mA
Temas de Consulta
1. Bases de datos orientadas a objetos y y funcionalidades
2. Bases de datos relacionales
3. Almacenamiento de bases de datos distribuidas
4. Rendimiento de las bases de datos
5. Big data
6. Inteligencia de negocios y mineria de datos
7. Datawarehouse
8. Cubos y datamarts
9. Mineria de datos
10. Realizar un mapa conceptual donde relacione los temas anteriores
Seleccionar un tema para exponer la próxima clase
Realizar una presentación en el programa que desee para exponer la próxima clase
Encriptar y desencriptar datos
https://www.dropbox.com/s/cq8dhc2f8eolb74/Clase%20Para%20el%20s%C3%A1bado.txt?dl=0