Listado completo de tutoriales

20 - Valores por defecto.


Hemos visto los valores por defecto de los distintos tipos de datos. Ahora que conocemos más tipos de datos, vamos a ampliar la información referente a ellos y a repasar los conocidos.

Para campos de cualquier tipo no declarados "not null" el valor por defecto es "null" (excepto para tipos "timestamp" que no trataremos aquí).

Para campos declarados "not null", el valor por defecto depende del tipo de dato y en versiones nuevas de MySQL 8.0 genera un error no permitiendo la inserción de la fila (por compatibilidad con versiones anteriores podemos cambiar el estado de la variable: SET sql_mode = '';). Para cadenas de caracteres el valor por defecto es una cadena vacía. Para valores numéricos el valor por defecto es 0; en caso de ser "auto_increment" es el valor mayor existente+1 comenzando en 1. Para campos de tipo fecha y hora, el valor por defecto es 0 (por ejemplo, en un campo "date" es "0000-00-00").

Para todos los tipos, excepto "blob", "text" y "auto_increment" se pueden explicitar valores por defecto con la cláusula "default"; tema que veremos más adelante.

Un valor por defecto se inserta cuando no está presente al ingresar un registro y en algunos casos en que el dato ingresado es inválido.

Los campos para los cuales no se ingresaron valores tomarán los valores por defecto según el tipo de dato del campo, en el campo "codigo" ingresará el siguiente valor de la secuencia porque es "auto_increment"; en el campo "titulo", ingresará una cadena vacía porque es "varchar not null"; en el campo "editorial" almacenará "null", porque no está definido "not null"; en el campo "precio" guardará "null" porque es el valor por defecto de los campos no definidos como "not null" y en el campo "cantidad" ingresará 0 porque es el valor por defecto de los campos numéricos que no admiten valores nulos.


Tipo				Valor por defecto		   Cláusula "default"
_____________________________________________________________________________________
caracter not null		cadena vacía			   permite
numerico not null		0				   permite
fecha not null			0000-00-00			   permite
hora not null			00:00:00			   permite
auto_increment			siguiente de la sec., empieza en 1 no permite
carac.,numer.,fecha,hora null	null				   permite

En la última versión de MySQL 8.0.x cuando declaramos un campo con la restricción not null luego debemos ingresar el dato en el insert, en caso contrario genera un error. Podemos solucionar este problema cambiando la variable 'sql_mode':

SET sql_mode = '';

Servidor de MySQL instalado en forma local.

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:

drop table if exists libros;

SET sql_mode = '';

create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(20) not null,
  autor varchar(30),
  editorial varchar(15),
  precio decimal(5,2) unsigned,
  cantidad mediumint unsigned not null,
  primary key(codigo)
 );

insert into libros (titulo,autor,precio)
  values('El aleph','Borges',23.6);

select * from libros;

insert into libros (autor,editorial,cantidad)
  values('Borges','Planeta',100);

select * from libros;

Que nos generan una salida similar a esta:

MySQL

Si no cambiamos el valor de la variable 'sql_mode' por defecto no se pueden insertar filas y no especificar valores para un campo definido como not null:

MySQL

Retornar