In MariaDB, DEFAULT()
è una funzione incorporata che restituisce il valore predefinito per una colonna di tabella.
Se la colonna non ha un valore predefinito ed è NULLABLE
, quindi NULL
viene restituito. Se la colonna non ha un valore predefinito e non NULLABLE
, viene restituito un errore.
Sintassi
La sintassi è questa:
DEFAULT(col_name)
Dove col_name
è il nome della colonna per cui restituire il valore predefinito.
Può anche essere usato senza le parentesi e l'argomento in alcuni casi:
DEFAULT
Questa sintassi può essere utilizzata per impostare in modo esplicito una colonna sul valore predefinito.
Esempio
Ecco un esempio per dimostrare come funziona la funzione.
Supponiamo di creare una tabella come questa:
CREATE TABLE guest_meals (
guest_id INT NOT NULL,
meal VARCHAR(255) DEFAULT 'Salad',
special_request VARCHAR(255),
PRIMARY KEY (guest_id)
);
Qui, impostiamo un valore predefinito per il meal
colonna. In particolare, abbiamo utilizzato DEFAULT 'Salad'
per impostare il pasto predefinito su Salad
.
Questo utilizza il DEFAULT
clausola del CREATE TABLE
dichiarazione. Sebbene sia correlato al nostro scopo qui (imposta il valore predefinito per una colonna), non deve essere confuso con il DEFAULT()
funzione di cui tratta questo articolo.
Ora inseriamo alcune righe:
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');
Alcune di queste voci indicano esplicitamente quale pasto desidera l'ospite, mentre altre no. Quelli che non lo fanno utilizzeranno semplicemente il pasto predefinito (Salad
).
Quindi ora selezioniamo quelle righe dalla tabella. Includeremo il DEFAULT()
funzione nella nostra selezione:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals;
Risultato:
+----------+---------------+---------+--------------------------+-----------------+ | 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 | +----------+---------------+---------+--------------------------+-----------------+
Il DEFAULT(meal)
la colonna restituisce i valori predefiniti e il meal
colonna restituisce i valori effettivi che sono stati inseriti.
Allo stesso modo, il DEFAULT(special_request)
column restituisce i valori predefiniti per quella colonna e special_request
colonna restituisce i valori effettivi che sono stati inseriti.
Riguardo alla special_request
colonna, in realtà non abbiamo impostato un valore predefinito per questa colonna e quindi il risultato è NULL
. Nota che se la colonna non era NULLABLE
, quindi riceveremmo un errore (vedi sotto). Ma la colonna è NULLABLE
, e quindi il valore predefinito di NULL
restituito.
Inserimento esplicito del valore predefinito
Puoi usare il DEFAULT
parola chiave senza parentesi per inserire in modo esplicito il valore predefinito in una colonna.
Ecco un esempio:
INSERT INTO guest_meals (guest_id, meal, special_request)
VALUES (6, DEFAULT, DEFAULT);
Ora selezioniamo quella riga:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals
WHERE guest_id = 6;
Risultato:
+----------+---------------+-------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+-------+--------------------------+-----------------+ | 6 | Salad | Salad | NULL | NULL | +----------+---------------+-------+--------------------------+-----------------+
In entrambi i casi ha inserito il valore di default per la rispettiva colonna. Per il meal
colonna, questo era Salad
. Per la special_request
colonna, questo era NULL
.
Colonne non annullabili
Come accennato, cercando di ottenere il valore predefinito da un non NULLABLE
la colonna che non ha un valore predefinito genera un errore.
Esempio:
SELECT DEFAULT(guest_id)
FROM guest_meals;
Risultato:
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value
Quando abbiamo creato la tabella, non abbiamo fornito un valore predefinito per guest_id
colonna e lo impostiamo anche su NOT NULL
. Per questo motivo, viene visualizzato un errore quando si tenta di restituire il valore predefinito.
Colonne intere che utilizzano AUTO_INCREMENT
Per colonne intere utilizzando AUTO_INCREMENT
, il valore restituito è 0
.
Ad esempio, creiamo una tabella con un AUTO_INCREMENT
colonna:
CREATE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Il guest_id
la colonna utilizza un INT
(intero) tipo di dati ed è impostato su AUTO_INCREMENT
.
Ora inserisci alcune righe:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Ora, restituiamo il valore predefinito di guest_id
colonna:
SELECT
DEFAULT(guest_id),
guest_id
FROM guest;
Risultato:
+-------------------+----------+ | DEFAULT(guest_id) | guest_id | +-------------------+----------+ | 0 | 1 | | 0 | 2 | | 0 | 3 | +-------------------+----------+
Il DEFAULT(guest_id)
colonna mostra che il valore predefinito è 0
per tutte le righe. Il guest_id
la colonna mostra il valore effettivo che è stato inserito (che è stato generato da AUTO_INCREMENT
).