В MariaDB, DEFAULT()
е вградена функция, която връща стойността по подразбиране за колона на таблица.
Ако колоната няма стойност по подразбиране и е NULLABLE
, след това NULL
се връща. Ако колоната няма стойност по подразбиране и е не NULLABLE
, се връща грешка.
Синтаксис
Синтаксисът е така:
DEFAULT(col_name)
Където col_name
е името на колоната, за която да се върне стойността по подразбиране.
Може да се използва и без скоби и аргумент в определени случаи:
DEFAULT
Този синтаксис може да се използва за изрично задаване на стойност на колона по подразбиране.
Пример
Ето пример, за да демонстрирате как работи функцията.
Да предположим, че създаваме таблица като тази:
CREATE TABLE guest_meals (
guest_id INT NOT NULL,
meal VARCHAR(255) DEFAULT 'Salad',
special_request VARCHAR(255),
PRIMARY KEY (guest_id)
);
Тук задаваме стойност по подразбиране за meal
колона. По-конкретно, ние използвахме DEFAULT 'Salad'
за да зададете храненето по подразбиране на Salad
.
Това използва DEFAULT
клауза на CREATE TABLE
изявление. Макар че е свързано с нашата цел тук (задава стойността по подразбиране за колона), не бива да се бърка с DEFAULT()
функция, за която е тази статия.
Сега нека вмъкнем няколко реда:
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');
Някои от тези записи изрично посочват кое ястие желае гостът, докато други не. Тези, които не го правят, просто ще използват храната по подразбиране (Salad
).
Така че сега нека изберем тези редове от таблицата. Ще включим DEFAULT()
функция в нашата селекция:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals;
Резултат:
+----------+---------------+---------+--------------------------+-----------------+ | 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)
колоната връща стойностите по подразбиране, а meal
колона връща действителните стойности, които са били вмъкнати.
По същия начин, DEFAULT(special_request)
column връща стойностите по подразбиране за тази колона и special_request
колона връща действителните стойности, които са били вмъкнати.
Относно special_request
колона, всъщност не сме задали стойност по подразбиране за тази колона и така резултатът е NULL
. Имайте предвид, че ако колоната не е NULLABLE
, тогава ще получим грешка (вижте по-долу). Но колоната е NULLABLE
, и така стойността по подразбиране на NULL
върнати.
Изрично вмъкване на стойността по подразбиране
Можете да използвате DEFAULT
ключова дума без скоби, за да вмъкнете изрично стойността по подразбиране в колона.
Ето един пример:
INSERT INTO guest_meals (guest_id, meal, special_request)
VALUES (6, DEFAULT, DEFAULT);
Сега нека изберем този ред:
SELECT
guest_id,
DEFAULT(meal),
meal,
DEFAULT(special_request),
special_request
FROM guest_meals
WHERE guest_id = 6;
Резултат:
+----------+---------------+-------+--------------------------+-----------------+ | guest_id | DEFAULT(meal) | meal | DEFAULT(special_request) | special_request | +----------+---------------+-------+--------------------------+-----------------+ | 6 | Salad | Salad | NULL | NULL | +----------+---------------+-------+--------------------------+-----------------+
И в двата случая той вмъква стойността по подразбиране за съответната колона. За meal
колона, това беше Salad
. За special_request
колона, това беше NULL
.
Колони без нула
Както бе споменато, опит за получаване на стойността по подразбиране от не-NULLABLE
колона, която няма стойност по подразбиране, води до грешка.
Пример:
SELECT DEFAULT(guest_id)
FROM guest_meals;
Резултат:
ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value
Когато създадохме таблицата, не предоставихме стойност по подразбиране за guest_id
колона и ние също го задаваме на NOT NULL
. Поради това получаваме грешка, когато се опитваме да върнем стойността по подразбиране.
Цели колони, използващи AUTO_INCREMENT
За колони с цели числа, използвайки AUTO_INCREMENT
връщаната стойност е 0
.
Като пример, нека създадем таблица с AUTO_INCREMENT
колона:
CREATE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
guest_id
колоната използва INT
(цело число) тип данни и е настроен на AUTO_INCREMENT
.
Сега поставете няколко реда:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Сега нека върнем стойността по подразбиране на guest_id
колона:
SELECT
DEFAULT(guest_id),
guest_id
FROM guest;
Резултат:
+-------------------+----------+ | DEFAULT(guest_id) | guest_id | +-------------------+----------+ | 0 | 1 | | 0 | 2 | | 0 | 3 | +-------------------+----------+
DEFAULT(guest_id)
колоната показва, че стойността по подразбиране е 0
за всички редове. guest_id
колоната показва действителната стойност, която е била вмъкната (която е генерирана от AUTO_INCREMENT
).