Listado completo de tutoriales
57 - Tipo de dato enum. |
Además de los tipos de datos ya conocidos, existen otros que analizaremos ahora, los tipos "enum" y "set".
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.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists postulantes; create table postulantes( numero int unsigned auto_increment, documento char(8), nombre varchar(30), sexo char(1), estudios enum('ninguno','primario','secundario', 'terciario','universitario') not null, primary key(numero) ); insert into postulantes (documento,nombre,sexo,estudios) values('22333444','Ana Acosta','f','primario'); insert into postulantes (documento,nombre,sexo,estudios) values('22433444','Mariana Mercado','m','universitario'); -- Ingresamos un registro sin especificar valor para "estudios", guardará el valor por defecto: insert into postulantes (documento,nombre,sexo) values('24333444','Luis Lopez','m'); select * from postulantes; insert into postulantes (documento,nombre,sexo,estudios) values('2455566','Juana Pereyra','f',5); -- Si ingresamos un valor no presente en la lista produce error en las nuevas versiones -- de MySQL insert into postulantes (documento,nombre,sexo,estudios) values('24678907','Pedro Perez','m','Post Grado'); insert into postulantes (documento,nombre,sexo,estudios) values('22222333','Susana Pereyra','f',6); insert into postulantes (documento,nombre,sexo,estudios) values('25676567','Marisa Molina','f',0); select * from postulantes where estudios=0; select * from postulantes where estudios='universitario'; insert into postulantes (documento,nombre,sexo,estudios) values('25676567','Marisa Molina','f',null); select * from postulantes;
Genera una salida similar a esta: