In MariaDB, DEFAULT()
is een ingebouwde functie die de standaardwaarde voor een tabelkolom retourneert.
Als de kolom geen standaardwaarde heeft en deze is NULLABLE
, dan NULL
wordt teruggestuurd. Als de kolom geen standaardwaarde heeft en het is niet NULLABLE
, wordt een fout geretourneerd.
Syntaxis
De syntaxis gaat als volgt:
DEFAULT(col_name)
Waar col_name
is de naam van de kolom waarvoor de standaardwaarde moet worden geretourneerd.
Het kan in bepaalde gevallen ook worden gebruikt zonder de haakjes en het argument:
DEFAULT
Deze syntaxis kan worden gebruikt om een kolom expliciet op de standaardwaarde in te stellen.
Voorbeeld
Hier is een voorbeeld om te demonstreren hoe de functie werkt.
Stel dat we een tabel als volgt maken:
CREATE TABLE guest_meals (
guest_id INT NOT NULL,
meal VARCHAR(255) DEFAULT 'Salad',
special_request VARCHAR(255),
PRIMARY KEY (guest_id)
);
Hier stellen we een standaardwaarde in voor de meal
kolom. In het bijzonder gebruikten we DEFAULT 'Salad'
om de standaardmaaltijd in te stellen op Salad
.
Dit gebruikt de DEFAULT
clausule van de CREATE TABLE
uitspraak. Hoewel gerelateerd aan ons doel hier (het stelt de standaardwaarde voor een kolom in), moet het niet worden verward met de DEFAULT()
functie waar dit artikel over gaat.
Laten we nu enkele rijen invoegen:
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');
Sommige van deze vermeldingen geven expliciet aan welke maaltijd de gast wil, terwijl andere dat niet doen. Degenen die dat niet doen, gebruiken gewoon de standaardmaaltijd (Salad
).
Laten we nu die rijen uit de tabel selecteren. We zullen de DEFAULT()
functie in onze selectie:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals;
Resultaat:
+----------+---------------+---------+--------------------------+-----------------+ | 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 | +----------+---------------+---------+--------------------------+-----------------+
De DEFAULT(meal)
kolom geeft de standaardwaarden terug, en de meal
kolom retourneert de werkelijke waarden die zijn ingevoegd.
Evenzo is de DEFAULT(special_request)
kolom retourneert de standaardwaarden voor die kolom, en de special_request
kolom geeft de werkelijke waarden terug die zijn ingevoegd.
Met betrekking tot het special_request
kolom, we hebben niet echt een standaardwaarde voor deze kolom ingesteld en dus is het resultaat NULL
. Merk op dat als de kolom niet NULLABLE
. was , dan krijgen we een foutmelding (zie hieronder). Maar de kolom is NULLABLE
, en dus de standaardwaarde van NULL
teruggestuurd.
Expliciet de standaardwaarde invoegen
U kunt de DEFAULT
. gebruiken zoekwoord zonder haakjes om de standaardwaarde expliciet in een kolom in te voegen.
Hier is een voorbeeld:
INSERT INTO guest_meals (guest_id, meal, special_request)
VALUES (6, DEFAULT, DEFAULT);
Laten we nu die rij selecteren:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals
WHERE guest_id = 6;
Resultaat:
+----------+---------------+-------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+-------+--------------------------+-----------------+ | 6 | Salad | Salad | NULL | NULL | +----------+---------------+-------+--------------------------+-----------------+
In beide gevallen is de standaardwaarde voor de respectieve kolom ingevoegd. Voor de meal
kolom, dit was Salad
. Voor de special_request
kolom, dit was NULL
.
Niet-nullable kolommen
Zoals gezegd, proberen om de standaardwaarde te krijgen van een niet-NULLABLE
kolom die geen standaardwaarde heeft, resulteert in een fout.
Voorbeeld:
SELECT DEFAULT(guest_id)
FROM guest_meals;
Resultaat:
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value
Toen we de tabel maakten, hebben we geen standaardwaarde opgegeven voor de guest_id
kolom, en we stellen het ook in op NOT NULL
. Hierdoor krijgen we een foutmelding wanneer we proberen de standaardwaarde te retourneren.
Integer kolommen met AUTO_INCREMENT
Voor integer-kolommen met AUTO_INCREMENT
, de retourwaarde is 0
.
Laten we als voorbeeld een tabel maken met een AUTO_INCREMENT
kolom:
CREATE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
De guest_id
kolom gebruikt een INT
(geheel getal) gegevenstype, en het is ingesteld op AUTO_INCREMENT
.
Voeg nu enkele rijen in:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Laten we nu de standaardwaarde van de guest_id
. teruggeven kolom:
SELECT
DEFAULT(guest_id),
guest_id
FROM guest;
Resultaat:
+-------------------+----------+ | DEFAULT(guest_id) | guest_id | +-------------------+----------+ | 0 | 1 | | 0 | 2 | | 0 | 3 | +-------------------+----------+
De DEFAULT(guest_id)
kolom laat zien dat de standaardwaarde 0
. is voor alle rijen. De guest_id
kolom toont de werkelijke waarde die is ingevoegd (die is gegenereerd door de AUTO_INCREMENT
).