MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB DEFAULT() erklärt

In MariaDB DEFAULT() ist eine eingebaute Funktion, die den Standardwert für eine Tabellenspalte zurückgibt.

Wenn die Spalte keinen Standardwert hat und sie NULLABLE ist , dann NULL ist zurück gekommen. Wenn die Spalte keinen Standardwert hat und es nicht ist NULLABLE , wird ein Fehler zurückgegeben.

Syntax

Die Syntax lautet wie folgt:

DEFAULT(col_name)

Wobei col_name ist der Name der Spalte, für die der Standardwert zurückgegeben werden soll.

Es kann in bestimmten Fällen auch ohne die Klammern und Argumente verwendet werden:

DEFAULT

Diese Syntax kann verwendet werden, um eine Spalte explizit auf ihren Standardwert zu setzen.

Beispiel

Hier ist ein Beispiel, um zu demonstrieren, wie die Funktion funktioniert.

Angenommen, wir erstellen eine Tabelle wie diese:

CREATE TABLE guest_meals (
  guest_id INT NOT NULL,
  meal VARCHAR(255) DEFAULT 'Salad',
  special_request VARCHAR(255),
  PRIMARY KEY (guest_id)
);

Hier legen wir einen Standardwert für die meal fest Säule. Insbesondere haben wir DEFAULT 'Salad' verwendet um die Standardmahlzeit auf Salad einzustellen .

Dies verwendet den DEFAULT -Klausel von CREATE TABLE Erklärung. Während es sich hier auf unseren Zweck bezieht (es legt den Standardwert für eine Spalte fest), darf es nicht mit DEFAULT() verwechselt werden Funktion, um die es in diesem Artikel geht.

Lassen Sie uns nun einige Zeilen einfügen:

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');

Einige dieser Einträge geben explizit an, welche Mahlzeit der Gast möchte, andere nicht. Diejenigen, die dies nicht tun, verwenden einfach die Standardmahlzeit (Salad ).

Lassen Sie uns nun diese Zeilen aus der Tabelle auswählen. Wir werden DEFAULT() einschließen Funktion in unserer Auswahl:

SELECT 
    guest_id,
    DEFAULT(meal),
    meal,
    DEFAULT(special_request),
    special_request
FROM guest_meals;

Ergebnis:

+----------+---------------+---------+--------------------------+-----------------+
| 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           |
+----------+---------------+---------+--------------------------+-----------------+

Der DEFAULT(meal) Spalte gibt die Standardwerte und das meal zurück Spalte gibt die tatsächlich eingefügten Werte zurück.

Ebenso der DEFAULT(special_request) Spalte gibt die Standardwerte für diese Spalte und den special_request zurück Spalte gibt die tatsächlich eingefügten Werte zurück.

Bezüglich der special_request -Spalte haben wir keinen Standardwert für diese Spalte festgelegt und daher ist das Ergebnis NULL . Beachten Sie, dass wenn die Spalte nicht NULLABLE war , dann würden wir einen Fehler erhalten (siehe unten). Aber die Spalte ist NULLABLE , und damit der Standardwert von NULL zurückgegeben.

Explizites Einfügen des Standardwerts

Sie können den DEFAULT verwenden Schlüsselwort ohne Klammern, um den Standardwert explizit in eine Spalte einzufügen.

Hier ist ein Beispiel:

INSERT INTO guest_meals (guest_id, meal, special_request) 
VALUES (6, DEFAULT, DEFAULT);

Jetzt wählen wir diese Zeile aus:

SELECT 
    guest_id,
    DEFAULT(meal),
    meal,
    DEFAULT(special_request),
    special_request
FROM guest_meals
WHERE guest_id = 6;

Ergebnis:

+----------+---------------+-------+--------------------------+-----------------+
| guest_id | DEFAULT(meal) | meal  | DEFAULT(special_request) | special_request |
+----------+---------------+-------+--------------------------+-----------------+
|        6 | Salad         | Salad | NULL                     | NULL            |
+----------+---------------+-------+--------------------------+-----------------+

In beiden Fällen wurde der Standardwert für die jeweilige Spalte eingefügt. Für die meal Spalte, das war Salad . Für die special_request Spalte war dies NULL .

Nicht nullbare Spalten

Wie bereits erwähnt, wird versucht, den Standardwert von einem Nicht-NULLABLE abzurufen Spalte, die keinen Standardwert hat, führt zu einem Fehler.

Beispiel:

SELECT DEFAULT(guest_id)
FROM guest_meals;

Ergebnis:

ERROR 1364 (HY000): Field 'guest_id' doesn't have a default value

Als wir die Tabelle erstellt haben, haben wir keinen Standardwert für guest_id angegeben -Spalte, und wir setzen sie auch auf NOT NULL . Aus diesem Grund erhalten wir eine Fehlermeldung, wenn wir versuchen, den Standardwert zurückzugeben.

Integer-Spalten mit AUTO_INCREMENT

Für ganzzahlige Spalten mit AUTO_INCREMENT , der Rückgabewert ist 0 .

Lassen Sie uns als Beispiel eine Tabelle mit einem AUTO_INCREMENT erstellen Spalte:

CREATE TABLE guest (
  guest_id INT NOT NULL AUTO_INCREMENT,
  guest_name VARCHAR(255) NOT NULL,
  PRIMARY KEY (guest_id)
);

Die guest_id Spalte verwendet einen INT (Integer)-Datentyp und ist auf AUTO_INCREMENT eingestellt .

Fügen Sie nun einige Zeilen ein:

INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');

Lassen Sie uns nun den Standardwert der guest_id zurückgeben Spalte:

SELECT 
    DEFAULT(guest_id),
    guest_id
FROM guest;

Ergebnis:

+-------------------+----------+
| DEFAULT(guest_id) | guest_id |
+-------------------+----------+
|                 0 |        1 |
|                 0 |        2 |
|                 0 |        3 |
+-------------------+----------+

Der DEFAULT(guest_id) Spalte zeigt, dass der Standardwert 0 ist für alle Reihen. Die guest_id Spalte zeigt den tatsächlich eingefügten Wert (der durch AUTO_INCREMENT generiert wurde). ).