MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB DEFAULT() explicado


No MariaDB, DEFAULT() é uma função interna que retorna o valor padrão para uma coluna da tabela.

Se a coluna não tiver valor padrão e for NULLABLE , então NULL é devolvido. Se a coluna não tiver valor padrão e não NULLABLE , um erro é retornado.

Sintaxe


A sintaxe fica assim:
DEFAULT(col_name)

Onde col_name é o nome da coluna para a qual retornar o valor padrão.

Também pode ser usado sem os parênteses e o argumento em certos casos:
DEFAULT

Essa sintaxe pode ser usada para definir explicitamente uma coluna com seu valor padrão.

Exemplo


Aqui está um exemplo para demonstrar como a função funciona.

Suponha que criamos uma tabela assim:
CREATE TABLE guest_meals (
  guest_id INT NOT NULL,
  meal VARCHAR(255) DEFAULT 'Salad',
  special_request VARCHAR(255),
  PRIMARY KEY (guest_id)
);

Aqui, definimos um valor padrão para a meal coluna. Especificamente, usamos DEFAULT 'Salad' para definir a refeição padrão para Salad .

Isso usa o DEFAULT cláusula do CREATE TABLE demonstração. Embora relacionado ao nosso propósito aqui (ele define o valor padrão para uma coluna), não deve ser confundido com o DEFAULT() função de que trata este artigo.

Agora vamos inserir algumas linhas:
INSERT INTO guest_meals (guest_id) VALUES (1);
INSERT INTO guest_meals (guest_id, meal) VALUES (2, 'Fish');
INSERT INTO guest_meals (guest_id, meal) VALUES (3, 'Burrito');
INSERT INTO guest_meals (guest_id, meal, special_request) VALUES (4, 'Pasta', 'Hot');
INSERT INTO guest_meals (guest_id, special_request) VALUES (5, 'Vegan');

Algumas dessas entradas indicam explicitamente qual refeição o convidado deseja, enquanto outras não. Os que não usarem apenas usarão a refeição padrão (Salad ).

Então agora vamos selecionar essas linhas da tabela. Incluiremos o DEFAULT() função em nossa seleção:
SELECT 
    guest_id,
    DEFAULT(meal),
    meal,
    DEFAULT(special_request),
    special_request
FROM guest_meals;

Resultado:
+----------+---------------+---------+--------------------------+-----------------+
| guest_id | DEFAULT(meal) | meal    | DEFAULT(special_request) | special_request |
+----------+---------------+---------+--------------------------+-----------------+
|        1 | Salad         | Salad   | NULL                     | NULL            |
|        2 | Salad         | Fish    | NULL                     | NULL            |
|        3 | Salad         | Burrito | NULL                     | NULL            |
|        4 | Salad         | Pasta   | NULL                     | Hot             |
|        5 | Salad         | Salad   | NULL                     | Vegan           |
+----------+---------------+---------+--------------------------+-----------------+

O DEFAULT(meal) coluna retorna os valores padrão e a meal coluna retorna os valores reais que foram inseridos.

Da mesma forma, o DEFAULT(special_request) coluna retorna os valores padrão para essa coluna e o special_request coluna retorna os valores reais que foram inseridos.

Em relação ao special_request coluna, não definimos um valor padrão para esta coluna e, portanto, o resultado é NULL . Observe que, se a coluna não for NULLABLE , receberíamos um erro (veja abaixo). Mas a coluna é NULLABLE , e assim o valor padrão de NULL devolvida.

Inserindo explicitamente o valor padrão


Você pode usar o DEFAULT palavra-chave sem parênteses para inserir explicitamente o valor padrão em uma coluna.

Aqui está um exemplo:
INSERT INTO guest_meals (guest_id, meal, special_request) 
VALUES (6, DEFAULT, DEFAULT);

Agora vamos selecionar essa linha:
SELECT 
    guest_id,
    DEFAULT(meal),
    meal,
    DEFAULT(special_request),
    special_request
FROM guest_meals
WHERE guest_id = 6;

Resultado:
+----------+---------------+-------+--------------------------+-----------------+
| guest_id | DEFAULT(meal) | meal  | DEFAULT(special_request) | special_request |
+----------+---------------+-------+--------------------------+-----------------+
|        6 | Salad         | Salad | NULL                     | NULL            |
+----------+---------------+-------+--------------------------+-----------------+

Em ambos os casos, inseriu o valor padrão para a respectiva coluna. Para a meal coluna, era Salad . Para o special_request coluna, isso era NULL .

Colunas não anuláveis


Como mencionado, tentando obter o valor padrão de um não-NULLABLE coluna que não tem um valor padrão resulta em um erro.

Exemplo:
SELECT DEFAULT(guest_id)
FROM guest_meals;

Resultado:
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value

Quando criamos a tabela, não fornecemos um valor padrão para o guest_id coluna, e também a definimos como NOT NULL . Por causa disso, recebemos um erro ao tentar retornar seu valor padrão.

Colunas inteiras usando AUTO_INCREMENT


Para colunas inteiras usando AUTO_INCREMENT , o valor de retorno é 0 .

Como exemplo, vamos criar uma tabela com um AUTO_INCREMENT coluna:
CREATE TABLE guest (
  guest_id INT NOT NULL AUTO_INCREMENT,
  guest_name VARCHAR(255) NOT NULL,
  PRIMARY KEY (guest_id)
);

O guest_id coluna usa um INT tipo de dados (integer) e está definido como AUTO_INCREMENT .

Agora insira algumas linhas:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');

Agora, vamos retornar o valor padrão do guest_id coluna:
SELECT 
    DEFAULT(guest_id),
    guest_id
FROM guest;

Resultado:
+-------------------+----------+
| DEFAULT(guest_id) | guest_id |
+-------------------+----------+
|                 0 |        1 |
|                 0 |        2 |
|                 0 |        3 |
+-------------------+----------+

O DEFAULT(guest_id) coluna mostra que o valor padrão é 0 para todas as linhas. O guest_id coluna mostra o valor real que foi inserido (que foi gerado pelo AUTO_INCREMENT ).