sql >> Databáze >  >> RDS >> MariaDB

MariaDB DEFAULT() Vysvětleno

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


  1. Importovat výpis MySQL do databáze PostgreSQL

  2. INSERT 10 milionů dotazů do 10 minut v Oracle?

  3. Postgres je nejlepší databáze – Důvod č. 2:Licence

  4. Vysvětlení SQL Server (localdb)\v11.0