sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB DEFAULT() Förklarat

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


  1. Hur undkommer jag ett procenttecken i T-SQL?

  2. PostgreSQL:FOREIGN KEY/ON DELETE CASCADE

  3. Så här fixar du "Ett korrelationsnamn måste anges för bulkraduppsättningen i from-satsen." i SQL Server

  4. MySQL-utlösare för att uppdatera ett fält till värdet av id