MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB DEFAULT()

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