sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB DEFAULT() Forklaret

I MariaDB, DEFAULT() er en indbygget funktion, der returnerer standardværdien for en tabelkolonne.

Hvis kolonnen ikke har nogen standardværdi, og den er NULLABLE , derefter NULL er returneret. Hvis kolonnen ikke har nogen standardværdi, og den er ikke NULLABLE , returneres en fejl.

Syntaks

Syntaksen ser sådan ud:

DEFAULT(col_name)

Hvor col_name er navnet på den kolonne, som standardværdien skal returneres for.

Det kan også bruges uden parentes og argument i visse tilfælde:

DEFAULT

Denne syntaks kan bruges til eksplicit at indstille en kolonne til dens standardværdi.

Eksempel

Her er et eksempel for at demonstrere, hvordan funktionen fungerer.

Antag, at vi opretter en tabel som denne:

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

Her indstiller vi en standardværdi for meal kolonne. Specifikt brugte vi DEFAULT 'Salad' for at indstille standardmåltidet til Salad .

Dette bruger DEFAULT klausul i CREATE TABLE udmelding. Selvom det er relateret til vores formål her (det angiver standardværdien for en kolonne), må det ikke forveksles med DEFAULT() funktion, som denne artikel handler om.

Lad os nu indsætte nogle rækker:

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

Nogle af disse poster angiver eksplicit, hvilket måltid gæsten ønsker, mens andre ikke gør. Dem, der ikke gør det, vil bare bruge standardmåltidet (Salad ).

Så lad os nu vælge disse rækker fra tabellen. Vi vil inkludere DEFAULT() funktion i vores udvalg:

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) kolonnen returnerer standardværdierne og meal kolonne returnerer de faktiske værdier, der blev indsat.

På samme måde er DEFAULT(special_request) kolonne returnerer standardværdierne for den kolonne og special_request kolonne returnerer de faktiske værdier, der blev indsat.

Med hensyn til special_request kolonne, har vi faktisk ikke angivet en standardværdi for denne kolonne, og derfor er resultatet NULL . Bemærk, at hvis kolonnen ikke var NULLABLE , så får vi en fejl (se nedenfor). Men kolonnen er NULLABLE , og så standardværdien NULL returneret.

Eksplicit indsættelse af standardværdien

Du kan bruge DEFAULT nøgleord uden parentes for eksplicit at indsætte standardværdien i en kolonne.

Her er et eksempel:

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

Lad os nu vælge den række:

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 begge tilfælde indsatte den standardværdien for den respektive kolonne. Til meal kolonne, dette var Salad . Til special_request kolonne, dette var NULL .

Kolonner, der ikke kan nulstilles

Som nævnt forsøger man at få standardværdien fra en ikke-NULLABLE kolonne, der ikke har en standardværdi, resulterer i en fejl.

Eksempel:

SELECT DEFAULT(guest_id)
FROM guest_meals;

Resultat:

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

Da vi oprettede tabellen, angav vi ikke en standardværdi for guest_id kolonne, og vi sætter den også til NOT NULL . På grund af dette får vi en fejl, når vi forsøger at returnere standardværdien.

Heltalskolonner med AUTO_INCREMENT

For heltalskolonner, der bruger AUTO_INCREMENT , returværdien er 0 .

Lad os som et eksempel oprette en tabel med en AUTO_INCREMENT kolonne:

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

guest_id kolonne bruger en INT (heltal) datatype, og den er indstillet til AUTO_INCREMENT .

Indsæt nu nogle rækker:

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

Lad os nu returnere standardværdien for guest_id kolonne:

SELECT 
    DEFAULT(guest_id),
    guest_id
FROM guest;

Resultat:

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

DEFAULT(guest_id) kolonne viser, at standardværdien er 0 for alle rækker. guest_id kolonne viser den faktiske værdi, der blev indsat (som er genereret af AUTO_INCREMENT ).


  1. Sådan gemmer du Java Date til Mysql datetime med JPA

  2. Når jeg kalder PreparedStatement.cancel() i et JDBC-program, dræber det det så i en Oracle-database?

  3. TCL-kommandoer i SQL

  4. Sådan indsætter du Excel- eller CSV-data i tabel ved hjælp af grafisk brugergrænseflade i SQL Server - SQL Server / TSQL Tutorial Del 102