Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre o "enum()"

Boa noite.

Quando o professor explicou sobre o "enum()" e sua funcionalidade, logo aliei esse comando à lista de validação do excel. Porém, ao fazer alguns testes, percebi que o enum não não é exatamente uma lista de validação, mas sim o tipo de informação que uma determinada coluna irá armazenar. Isso me trouxe duas duas dúvidas:

1º - Como esse campo irá se comportar caso seja necessário fazer uma conta matemática com esses dados? Afinal de contas, mesmo que eu armazene números (como os valores de ingressos, por exemplo), o mySQL não interpreta esses dados como números (float, double, int), e sim como "enum".

2º - Essa dúvida surgiu enquanto eu fazia um teste prático. Eu criei uma coluna forma de pagamento tipo enum com crédito, débito e dinheiro como possibilidades de preenchimento. Ao incluir um novo registro sem a informar qual a forma de pagamento, a tabela foi preenchida com o dado NULL. Eu não queria isso, então eu apliquei o comando modify para que não aceitasse valores nulos. Por fim, tentei novamente inserir um registro sem especificar a forma de pagamento, esperando que o mySQL fosse truncar esse novo registro. Para minha surpresa, o mySQL inseriu o registro. Ao fazer o select, vi que a informação que constava como forma de pagamento do ultimo registro foi crédito, que é a primeira possibilidade de preenchimento que eu havia colocado no enum quando eu crei essa coluna. Então eu gostaria de saber se é isso mesmo: a primeira "classe" que colocamos em uma coluna enum se torna o default dessa coluna? obs: quando dou o comando "desc", não aparece nenhum default para a coluna de forma de pagamento.

1 resposta
solução!

Eric, boa tarde!

Desculpa a demora, andei pesquisando bastante pra te dar uma resposta certeira.

Então os itens salvos dentro de um ENUM são salvos como String, porém, ao fazer alguma conta matemática como no exemplo abaixo, ele irá fazer a conversão do dado para algo que faça mais sentido dentro daquele contexto, então se você tentar multiplicar um número por uma String (que contenha um número), o próprio MySQL irá fazer a conversão.

http://www.mysqltutorial.org/tryit/query/mysql-cast-function/#1

Sobre o default do ENUM será o primeiro inserido, porém caso você deseje modificar esse padrão pode usar a plavra reservada DEFAULT depois da declaração do item, como no exemplo abaixo:

Create table enum123(Rollno INT, Name Varchar(20), result ENUM('Pass','Fail') DEFAULT 'Fail');

Espero que tenha ficado claro, qualquer dúvida só mandar estamos aqui para ajudar!