sql >> Database >  >> RDS >> MariaDB

MariaDB DEFAULT() Uitgelegd

In MariaDB, DEFAULT() is een ingebouwde functie die de standaardwaarde voor een tabelkolom retourneert.

Als de kolom geen standaardwaarde heeft en deze is NULLABLE , dan NULL wordt teruggestuurd. Als de kolom geen standaardwaarde heeft en het is niet NULLABLE , wordt een fout geretourneerd.

Syntaxis

De syntaxis gaat als volgt:

DEFAULT(col_name)

Waar col_name is de naam van de kolom waarvoor de standaardwaarde moet worden geretourneerd.

Het kan in bepaalde gevallen ook worden gebruikt zonder de haakjes en het argument:

DEFAULT

Deze syntaxis kan worden gebruikt om een ​​kolom expliciet op de standaardwaarde in te stellen.

Voorbeeld

Hier is een voorbeeld om te demonstreren hoe de functie werkt.

Stel dat we een tabel als volgt maken:

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

Hier stellen we een standaardwaarde in voor de meal kolom. In het bijzonder gebruikten we DEFAULT 'Salad' om de standaardmaaltijd in te stellen op Salad .

Dit gebruikt de DEFAULT clausule van de CREATE TABLE uitspraak. Hoewel gerelateerd aan ons doel hier (het stelt de standaardwaarde voor een kolom in), moet het niet worden verward met de DEFAULT() functie waar dit artikel over gaat.

Laten we nu enkele rijen invoegen:

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

Sommige van deze vermeldingen geven expliciet aan welke maaltijd de gast wil, terwijl andere dat niet doen. Degenen die dat niet doen, gebruiken gewoon de standaardmaaltijd (Salad ).

Laten we nu die rijen uit de tabel selecteren. We zullen de DEFAULT() functie in onze selectie:

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

Resultaat:

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

De DEFAULT(meal) kolom geeft de standaardwaarden terug, en de meal kolom retourneert de werkelijke waarden die zijn ingevoegd.

Evenzo is de DEFAULT(special_request) kolom retourneert de standaardwaarden voor die kolom, en de special_request kolom geeft de werkelijke waarden terug die zijn ingevoegd.

Met betrekking tot het special_request kolom, we hebben niet echt een standaardwaarde voor deze kolom ingesteld en dus is het resultaat NULL . Merk op dat als de kolom niet NULLABLE . was , dan krijgen we een foutmelding (zie hieronder). Maar de kolom is NULLABLE , en dus de standaardwaarde van NULL teruggestuurd.

Expliciet de standaardwaarde invoegen

U kunt de DEFAULT . gebruiken zoekwoord zonder haakjes om de standaardwaarde expliciet in een kolom in te voegen.

Hier is een voorbeeld:

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

Laten we nu die rij selecteren:

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

Resultaat:

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

In beide gevallen is de standaardwaarde voor de respectieve kolom ingevoegd. Voor de meal kolom, dit was Salad . Voor de special_request kolom, dit was NULL .

Niet-nullable kolommen

Zoals gezegd, proberen om de standaardwaarde te krijgen van een niet-NULLABLE kolom die geen standaardwaarde heeft, resulteert in een fout.

Voorbeeld:

SELECT DEFAULT(guest_id)
FROM guest_meals;

Resultaat:

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

Toen we de tabel maakten, hebben we geen standaardwaarde opgegeven voor de guest_id kolom, en we stellen het ook in op NOT NULL . Hierdoor krijgen we een foutmelding wanneer we proberen de standaardwaarde te retourneren.

Integer kolommen met AUTO_INCREMENT

Voor integer-kolommen met AUTO_INCREMENT , de retourwaarde is 0 .

Laten we als voorbeeld een tabel maken met een AUTO_INCREMENT kolom:

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

De guest_id kolom gebruikt een INT (geheel getal) gegevenstype, en het is ingesteld op AUTO_INCREMENT .

Voeg nu enkele rijen in:

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

Laten we nu de standaardwaarde van de guest_id . teruggeven kolom:

SELECT 
    DEFAULT(guest_id),
    guest_id
FROM guest;

Resultaat:

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

De DEFAULT(guest_id) kolom laat zien dat de standaardwaarde 0 . is voor alle rijen. De guest_id kolom toont de werkelijke waarde die is ingevoegd (die is gegenereerd door de AUTO_INCREMENT ).


  1. Mogelijk om Oracle Database-objecttypen binnen PL/SQL te maken?

  2. SQL-query om de meest recente rij te krijgen voor elke instantie van een bepaalde sleutel

  3. Een primaire sleutel gebruiken met een WithoutRowID

  4. Rangfunctie in MySQL met Order By-clausule