I MariaDB, DEFAULT()
är en inbyggd funktion som returnerar standardvärdet för en tabellkolumn.
Om kolumnen inte har något standardvärde och den är NULLABLE
, sedan NULL
returneras. Om kolumnen inte har något standardvärde och det är inte NULLABLE
, returneras ett fel.
Syntax
Syntaxen ser ut så här:
DEFAULT(col_name)
Där col_name
är namnet på den kolumn som standardvärdet ska returneras för.
Det kan också användas utan parentes och argument i vissa fall:
DEFAULT
Denna syntax kan användas för att uttryckligen ställa in en kolumn till dess standardvärde.
Exempel
Här är ett exempel för att visa hur funktionen fungerar.
Anta att vi skapar en tabell så här:
CREATE TABLE guest_meals (
guest_id INT NOT NULL,
meal VARCHAR(255) DEFAULT 'Salad',
special_request VARCHAR(255),
PRIMARY KEY (guest_id)
);
Här ställer vi in ett standardvärde för meal
kolumn. Specifikt använde vi DEFAULT 'Salad'
för att ställa in standardmåltiden till Salad
.
Detta använder DEFAULT
satsen i CREATE TABLE
påstående. Även om det är relaterat till vårt syfte här (det anger standardvärdet för en kolumn), får det inte förväxlas med DEFAULT()
funktion som den här artikeln handlar om.
Låt oss nu infoga några rader:
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');
Vissa av dessa poster anger uttryckligen vilken måltid gästen vill ha medan andra inte gör det. De som inte gör det kommer bara att använda standardmåltiden (Salad
).
Så låt oss nu välja dessa rader från tabellen. Vi kommer att inkludera DEFAULT()
funktion i vårt urval:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals;
Resultat:
+----------+---------------+---------+--------------------------+-----------------+ | 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 | +----------+---------------+---------+--------------------------+-----------------+
DEFAULT(meal)
kolumnen returnerar standardvärdena och meal
kolumnen returnerar de faktiska värdena som infogades.
På liknande sätt, DEFAULT(special_request)
kolumn returnerar standardvärdena för den kolumnen och special_request
kolumnen returnerar de faktiska värdena som infogades.
Angående special_request
kolumn, har vi faktiskt inte angett ett standardvärde för den här kolumnen och så resultatet är NULL
. Observera att om kolumnen inte var NULLABLE
, då får vi ett felmeddelande (se nedan). Men kolumnen är NULLABLE
, och så standardvärdet för NULL
returnerade.
Explicit infoga standardvärdet
Du kan använda DEFAULT
nyckelord utan parentes för att uttryckligen infoga standardvärdet i en kolumn.
Här är ett exempel:
INSERT INTO guest_meals (guest_id, meal, special_request)
VALUES (6, DEFAULT, DEFAULT);
Låt oss nu välja den raden:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals
WHERE guest_id = 6;
Resultat:
+----------+---------------+-------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+-------+--------------------------+-----------------+ | 6 | Salad | Salad | NULL | NULL | +----------+---------------+-------+--------------------------+-----------------+
I båda fallen infogade den standardvärdet för respektive kolumn. För meal
kolumnen var detta Salad
. För special_request
kolumnen var detta NULL
.
Icke-nullbara kolumner
Som nämnt, försöker få standardvärdet från en icke-NULLABLE
kolumn som inte har ett standardvärde resulterar i ett fel.
Exempel:
SELECT DEFAULT(guest_id)
FROM guest_meals;
Resultat:
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value
När vi skapade tabellen angav vi inget standardvärde för guest_id
kolumn, och vi ställer också in den på NOT NULL
. På grund av detta får vi ett felmeddelande när vi försöker returnera dess standardvärde.
Heltalskolumner med AUTO_INCREMENT
För heltalskolumner som använder AUTO_INCREMENT
, returvärdet är 0
.
Som ett exempel, låt oss skapa en tabell med en AUTO_INCREMENT
kolumn:
CREATE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
guest_id
kolumnen använder en INT
(heltals) datatyp, och den är inställd på AUTO_INCREMENT
.
Infoga nu några rader:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Låt oss nu returnera standardvärdet för guest_id
kolumn:
SELECT
DEFAULT(guest_id),
guest_id
FROM guest;
Resultat:
+-------------------+----------+ | DEFAULT(guest_id) | guest_id | +-------------------+----------+ | 0 | 1 | | 0 | 2 | | 0 | 3 | +-------------------+----------+
DEFAULT(guest_id)
kolumnen visar att standardvärdet är 0
för alla rader. guest_id
kolumnen visar det faktiska värdet som infogades (som genererades av AUTO_INCREMENT
).