sql >> Base de Datos >  >> RDS >> MariaDB

Explicación de MariaDB DEFAULT()

En MariaDB, DEFAULT() es una función integrada que devuelve el valor predeterminado para una columna de tabla.

Si la columna no tiene un valor predeterminado y es NULLABLE , luego NULL es regresado. Si la columna no tiene un valor predeterminado y no NULLABLE , se devuelve un error.

Sintaxis

La sintaxis es así:

DEFAULT(col_name)

Donde col_name es el nombre de la columna para la que devolver el valor predeterminado.

También se puede usar sin los paréntesis y el argumento en ciertos casos:

DEFAULT

Esta sintaxis se puede usar para establecer explícitamente una columna en su valor predeterminado.

Ejemplo

Aquí hay un ejemplo para demostrar cómo funciona la función.

Supongamos que creamos una tabla como esta:

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

Aquí, establecemos un valor predeterminado para la meal columna. Específicamente, usamos DEFAULT 'Salad' para establecer la comida predeterminada en Salad .

Esto usa el DEFAULT cláusula de CREATE TABLE declaración. Si bien está relacionado con nuestro propósito aquí (establece el valor predeterminado para una columna), no debe confundirse con DEFAULT() función de la que trata este artículo.

Ahora insertemos algunas filas:

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

Algunas de estas entradas indican explícitamente qué comida quiere el huésped, mientras que otras no. Los que no solo usarán la comida predeterminada (Salad ).

Así que ahora seleccionemos esas filas de la tabla. Incluiremos el DEFAULT() función en nuestra selección:

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

Resultado:

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

El DEFAULT(meal) columna devuelve los valores predeterminados, y la meal columna devuelve los valores reales que se insertaron.

De manera similar, DEFAULT(special_request) columna devuelve los valores predeterminados para esa columna, y la special_request columna devuelve los valores reales que se insertaron.

Con respecto a la special_request columna, en realidad no establecimos un valor predeterminado para esta columna, por lo que el resultado es NULL . Tenga en cuenta que si la columna no era NULLABLE , obtendríamos un error (ver más abajo). Pero la columna es NULLABLE , por lo que el valor predeterminado de NULL devuelto.

Inserción explícita del valor predeterminado

Puedes usar el DEFAULT palabra clave sin paréntesis para insertar explícitamente el valor predeterminado en una columna.

He aquí un ejemplo:

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

Ahora seleccionemos esa fila:

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

Resultado:

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

En ambos casos, insertó el valor predeterminado para la columna respectiva. Para la meal columna, esto era Salad . Para la special_request columna, esto era NULL .

Columnas no anulables

Como se mencionó, intentar obtener el valor predeterminado de un no NULLABLE columna que no tiene un valor predeterminado da como resultado un error.

Ejemplo:

SELECT DEFAULT(guest_id)
FROM guest_meals;

Resultado:

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

Cuando creamos la tabla, no proporcionamos un valor predeterminado para el guest_id columna, y también lo establecemos en NOT NULL . Debido a esto, recibimos un error al intentar devolver su valor predeterminado.

Columnas enteras usando AUTO_INCREMENT

Para columnas enteras usando AUTO_INCREMENT , el valor de retorno es 0 .

Como ejemplo, creemos una tabla con un AUTO_INCREMENT columna:

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

El guest_id la columna usa un INT (entero) tipo de datos, y está configurado en AUTO_INCREMENT .

Ahora inserte algunas filas:

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

Ahora, devolvamos el valor predeterminado de guest_id columna:

SELECT 
    DEFAULT(guest_id),
    guest_id
FROM guest;

Resultado:

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

El DEFAULT(guest_id) columna muestra que el valor predeterminado es 0 para todas las filas. El guest_id columna muestra el valor real que se insertó (que fue generado por AUTO_INCREMENT ).