V MariaDB, DEFAULT()
je vestavěná funkce, která vrací výchozí hodnotu pro sloupec tabulky.
Pokud sloupec nemá žádnou výchozí hodnotu a je NULLABLE
a poté NULL
je vrácen. Pokud sloupec nemá žádnou výchozí hodnotu a není NULLABLE
, je vrácena chyba.
Syntaxe
Syntaxe vypadá takto:
DEFAULT(col_name)
Kde col_name
je název sloupce, pro který se má vrátit výchozí hodnota.
V určitých případech jej lze použít i bez závorek a argumentu:
DEFAULT
Tuto syntaxi lze použít k explicitnímu nastavení sloupce na jeho výchozí hodnotu.
Příklad
Zde je příklad demonstrující, jak funkce funguje.
Předpokládejme, že vytvoříme tabulku takto:
CREATE TABLE guest_meals (
guest_id INT NOT NULL,
meal VARCHAR(255) DEFAULT 'Salad',
special_request VARCHAR(255),
PRIMARY KEY (guest_id)
);
Zde nastavíme výchozí hodnotu pro meal
sloupec. Konkrétně jsme použili DEFAULT 'Salad'
pro nastavení výchozího jídla na Salad
.
Toto používá DEFAULT
klauzule CREATE TABLE
prohlášení. I když souvisí s naším účelem zde (nastavuje výchozí hodnotu pro sloupec), nelze jej zaměňovat s DEFAULT()
funkce, o které je tento článek.
Nyní vložíme několik řádků:
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');
Některé z těchto položek výslovně uvádějí, jaké jídlo si host přeje, zatímco jiné nikoli. Ty, které ne, použijí pouze výchozí jídlo (Salad
).
Nyní tedy vybereme tyto řádky z tabulky. Zahrneme DEFAULT()
funkce v našem výběru:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals;
Výsledek:
+----------+---------------+---------+--------------------------+-----------------+ | 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)
vrací výchozí hodnoty a meal
sloupec vrací skutečné hodnoty, které byly vloženy.
Podobně DEFAULT(special_request)
vrací výchozí hodnoty pro tento sloupec a special_request
sloupec vrací skutečné hodnoty, které byly vloženy.
Pokud jde o special_request
Ve skutečnosti jsme pro tento sloupec nenastavili výchozí hodnotu, takže výsledek je NULL
. Všimněte si, že pokud sloupec nebyl NULLABLE
, pak bychom dostali chybu (viz níže). Ale sloupec je NULLABLE
, a tedy výchozí hodnota NULL
vráceno.
Výslovné vložení výchozí hodnoty
Můžete použít DEFAULT
klíčové slovo bez závorek pro explicitní vložení výchozí hodnoty do sloupce.
Zde je příklad:
INSERT INTO guest_meals (guest_id, meal, special_request)
VALUES (6, DEFAULT, DEFAULT);
Nyní vybereme tento řádek:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals
WHERE guest_id = 6;
Výsledek:
+----------+---------------+-------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+-------+--------------------------+-----------------+ | 6 | Salad | Salad | NULL | NULL | +----------+---------------+-------+--------------------------+-----------------+
V obou případech vložil výchozí hodnotu pro příslušný sloupec. Na meal
to byl Salad
. Pro special_request
sloupec, toto bylo NULL
.
Sloupce bez možnosti Null
Jak již bylo zmíněno, pokoušíme se získat výchozí hodnotu z neNULLABLE
sloupec, který nemá výchozí hodnotu, způsobí chybu.
Příklad:
SELECT DEFAULT(guest_id)
FROM guest_meals;
Výsledek:
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value
Při vytváření tabulky jsme neposkytli výchozí hodnotu pro guest_id
a také jsme jej nastavili na NOT NULL
. Z tohoto důvodu se při pokusu o vrácení výchozí hodnoty zobrazí chyba.
Celočíselné sloupce pomocí AUTO_INCREMENT
Pro celočíselné sloupce pomocí AUTO_INCREMENT
, návratová hodnota je 0
.
Jako příklad vytvoříme tabulku s AUTO_INCREMENT
sloupec:
CREATE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
guest_id
sloupec používá INT
(celé číslo) a je nastaveno na AUTO_INCREMENT
.
Nyní vložte několik řádků:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Nyní vraťme výchozí hodnotu guest_id
sloupec:
SELECT
DEFAULT(guest_id),
guest_id
FROM guest;
Výsledek:
+-------------------+----------+ | DEFAULT(guest_id) | guest_id | +-------------------+----------+ | 0 | 1 | | 0 | 2 | | 0 | 3 | +-------------------+----------+
DEFAULT(guest_id)
ukazuje, že výchozí hodnota je 0
pro všechny řádky. guest_id
sloupec zobrazuje skutečnou hodnotu, která byla vložena (která byla vygenerována pomocí AUTO_INCREMENT
).