MariaDB
 sql >> база данни >  >> RDS >> MariaDB

MariaDB DEFAULT() Обяснено

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Първи стъпки с MariaDB с помощта на Docker, Java Spring и JDBC

  2. Как работи FLOOR() в MariaDB

  3. Опростете управлението на потребителски акаунт с MariaDB MaxScale 2.2 и MariaDB Server 10.3

  4. Надстройките с нулев престой стават лесни с ClusterControl

  5. Изпълнение на ProxySQL като помощен контейнер на Kubernetes