57 - Tipo de dato enum.


Problema:

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.

Eliminamos la tabla "postulantes", si existe.

Creamos la siguiente tabla definiendo un campo de tipo "enum":

 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)
 );

Ingresamos algunos registros:

 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');

Vemos el registro ingresado:

select * from postulantes;

En el campo "estudios" se guardó el valor por defecto, el primer valor de la lista enumerada.

Si ingresamos 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,sexo,estudios)
   values('2455566','Juana Pereyra','f',5);

En el campo "estudios" almacenará "universitario" que es valor de índice 5.

Si ingresamos un valor no presente en la lista, coloca una cadena vacía. Por ejemplo:

 insert into postulantes (documento,nombre,sexo,estudios)
  values('24678907','Pedro Perez','m','Post Grado');

Si ingresamos un valor de índice fuera de rango, almacena una cadena vacía:

 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);

La cadena vacía ingresada como resultado de ingresar un valor incorrecto 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;

Queremos seleccionar los postulantes con estudios universitarios:

 select * from postulantes
  where estudios='universitario';

Como el campo está definido como "not null", si intentamos almacenar el valor "null" aparece un mensaje de error y la sentencia no se ejecuta.

 insert into postulantes (documento,nombre,sexo,estudios)
  values('25676567','Marisa Molina','f',null);



Retornar