MySQL ENUM

Resumo : neste tutorial, você aprenderá como usar ENUMo tipo de dados MySQL para definir colunas que armazenam valores de enumeração.

Introdução ao tipo de dados MySQL ENUM

No MySQL, an ENUMé um objeto string cujo valor é escolhido em uma lista de valores permitidos definidos no momento da criação da coluna.

Para definir uma ENUMcoluna, você usa a seguinte sintaxe:

column_name ENUM('value1', 'value2', ..., 'valueN')Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • column_name: Este é o nome da coluna que usa o ENUMtipo de dados
  • 'value1', 'value2',… 'valueN': Esta é a lista de valores que a coluna pode conter. Os valores são separados por vírgulas.

Exemplo de tipo de dados MySQL ENUM

Suponha que você precise armazenar informações do ticket com prioridade: baixa, média e alta. Para atribuir esses valores de string à prioritycoluna, você pode usar o ENUMtipo de dados.

Primeiro, crie uma nova tabela que inclua uma prioritycoluna com o ENUMtipo:

CREATE TABLE tickets (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    priority ENUM('Low', 'Medium', 'High') NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A coluna aceita priorityapenas três valores Lowe Medium.High

Nos bastidores, o MySQL mapeia cada membro da enumeração para um índice numérico. Neste caso, mapeia os valores Baixo, Médio e Alto para 1, 2 e 3 respectivamente.

Segundo, insira uma nova linha na ticketstabela:

INSERT INTO tickets(title, priority)
VALUES('Scan virus for computer A', 'High');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, usamos o valor predefinido 'High'para inserir na prioritycoluna.

Além dos valores de enumeração, você pode usar o índice numérico do membro de enumeração para inserir dados em uma ENUMcoluna.

Terceiro, insira uma nova linha na tabela de tickets usando um valor de índice numérico em vez dos valores predefinidos:

INSERT INTO tickets(title, priority)
VALUES('Upgrade Windows OS for all computers', 1);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, em vez de usar o Lowvalor de enumeração, usamos o valor 1. Como Lowestá mapeado para 1, é aceitável.

Quarto, insira várias linhas na ticketstabela:

INSERT INTO tickets(title, priority)
VALUES('Install Google Chrome for Mr. John', 'Medium'),
      ('Create a new user for the new employee David', 'High');     Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como definimos the prioritycomo uma NOT NULLcoluna, quando você insere uma nova linha sem especificar o valor da prioritycoluna, o MySQL usará o primeiro membro da enumeração como valor padrão. Por exemplo:

INSERT INTO tickets(title)
VALUES('Refresh the computer of Ms. Lily');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O ticketsconteúdo da tabela é o seguinte:

+----+----------------------------------------------+----------+
| id | title                                        | priority |
+----+----------------------------------------------+----------+
|  1 | Scan virus for computer A                    | High     |
|  2 | Upgrade Windows OS for all computers         | Low      |
|  3 | Install Google Chrome for Mr. John           | Medium   |
|  4 | Create a new user for the new employee David | High     |
|  5 | Refresh the computer of Ms. Lily             | Low      |
+----+----------------------------------------------+----------+
5 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

No modo SQL não estrito, se você inserir um valor inválido em uma ENUMcoluna, o MySQL usará uma string vazia ''com o índice numérico 0para inserção.

Se você ativar o modo estrito SQL e tentar inserir um ENUMvalor inválido, receberá um erro.

Observe que uma ENUMcoluna pode aceitar NULLvalores se você a definir como uma coluna anulável.

Filtrando valores ENUM do MySQL

A instrução a seguir recupera todos os tickets com alta prioridade:

SELECT 
  * 
FROM 
  tickets 
WHERE 
  priority = 'High';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+----------------------------------------------+----------+
| id | title                                        | priority |
+----+----------------------------------------------+----------+
|  1 | Scan virus for computer A                    | High     |
|  4 | Create a new user for the new employee David | High     |
+----+----------------------------------------------+----------+Linguagem de código:  JavaScript  ( javascript )

Como o membro de enumeração 'High'está mapeado para 3, a consulta a seguir retorna o mesmo conjunto de resultados:

SELECT 
  * 
FROM 
  tickets 
WHERE 
  priority = 3;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Classificando valores ENUM do MySQL

O MySQL classifica ENUM os valores com base em seus números de índice. Portanto, a ordem dos membros depende de como foram definidos na lista de enumeração.

A consulta a seguir seleciona os tickets e os classifica por prioridade de Highaté Low:

SELECT 
  title, 
  priority 
FROM 
  tickets 
ORDER BY 
  priority DESC;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----------------------------------------------+----------+
| title                                        | priority |
+----------------------------------------------+----------+
| Scan virus for computer A                    | High     |
| Create a new user for the new employee David | High     |
| Install Google Chrome for Mr. John           | Medium   |
| Upgrade Windows OS for all computers         | Low      |
| Refresh the computer of Ms. Lily             | Low      |
+----------------------------------------------+----------+
5 rows in set (0.01 sec)Linguagem de código:  JavaScript  ( javascript )

É uma boa prática definir os valores de enumeração na ordem que você deseja classificar ao criar a ENUMcoluna.

Vantagens do tipo de dados ENUM

  • Validação de dados: ENUM os tipos de dados fornecem validação de dados forte porque restringem os valores das colunas a um conjunto predefinido de opções. Isso ajuda a manter a integridade dos dados.
  • Legibilidade: ENUM os valores são legíveis e autoexplicativos, facilitando a compreensão dos dados na coluna.
  • Eficiência de espaço: ENUM os valores são armazenados como números inteiros, que economizam mais espaço do que armazenar strings.

Limitações do tipo de dados ENUM

  • Flexibilidade Limitada: Uma vez ENUMdefinidos os valores, eles não podem ser facilmente alterados ou estendidos. Se precisar adicionar ou remover valores, talvez seja necessário alterar a estrutura da tabela, o que pode ser uma operação complexa.
  • Portabilidade: O ENUMtipo de dados é específico do MySQL e pode não ser suportado em outros sistemas de banco de dados.
  • Manutenção: ENUM os valores podem dificultar a manutenção do esquema à medida que o aplicativo evolui, pois adicionar ou remover valores pode ser complexo.

Resumo

  • Use MySQL ENUMpara definir colunas com um conjunto limitado de valores permitidos.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *