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