domingo, 8 de abril de 2012

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

 
 
 
Problema Resuelto:
 
Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla, si existe:

drop table if exists libros;

Creamos la tabla con la siguiente estructura:

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

Veamos en algunos ejemplos qué sucede cuando al ingresar un registro no colocamos
valores para algunos campos:

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

En el campo "codigo" ingresará el siguiente valor de la secuencia porque es "auto_increment";
en el campo "editorial" almacenará "null", porque el campo acepta valores nulos y en el campo
"cantidad" ingresará 0 porque es el valor por defecto de los campos numéricos que no admiten
valores nulos.

Ingresamos otro registro con algunos valores explícitos:

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

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" y en el campo "precio"
guardará "null" porque es el valor por defecto de los campos no definidos como "not null.


Problema Propuesto:

 
Trabaje con la tabla que almacena los datos sobre películas, llamada 
"peliculas".

1- Elimine la tabla si existe.

2- Créela con la siguiente estructura:
 
-codigo (entero sin signo, autoincrementable),
 -titulo (cadena de 30, not nulo),
 -actor (cadena de 20),
 -duracion (entero positivo hasta 200 apox.),
 -clave primaria (codigo).

3- Agregue los siguientes registros para ver cómo guarda MySQL 
los valores no ingresados:
 
(titulo,actor,duracion)
  Mision imposible,Tom Cruise,120
  5,90
  Harry Potter y la piedra filosofal,Daniel R.
  Harry Potter y la piedra filosofal,Daniel R.,120

4- Seleccione todos los datos de las películas para ver cómo 
guardó MySQL los valores no ingresados. En el primer registro 
ingresado, en el campo "codigo" ingresará "1", el primer valor 
para campos "auto_increment". En el segundo registro ingresado 
se almacena una cadena vacía para el título y el valor "null" 
para el actor. En el tercer registro guarda "6" en "codigo", el 
siguiente valor de la secuencia tomando el valor más alto y en 
"duracion" almacena "0". En el cuarto registro sigue la secuencia 
del código.


Otros problemas:

Una empresa almacena los datos de sus empleados en una tabla "empleados".

1- Elimine la tabla, si existe.

2- Cree la tabla:
 
create table empleados(
  nombre varchar(20),
  documento char(8) not null,
  sexo char(1),
  domicilio varchar(30),
  fechaingreso date not null,
  fechanacimiento date,
  sueldo decimal(5,2) unsigned not null
 );

3- Agregue los siguientes registros para ver cómo guarda 
MySQL los valores no ingresados:
 (nombre,documento,sexo)
  Marcela Medina,22333444,f
  Avellaneda 200,2005-08-16
  1970-09-26,500.90

4- Seleccione todos los datos de los empleados para ver cómo 
guardó MySQL los valores no ingresados. En el primer registro 
ingresado, en los campos "domicilio" y "fechanacimiento" ingresará 
"null", porque ninguno de los campos están definidos como "not null"; 
en el campo "fechaingreso" almacena "000-00-00" ya que dicho campo no 
admite valores nulos; en el campo "sueldo" guarda "0.00" porque el campo 
no admite valores nulos. En el segundo registro ingresado se almacena "null" 
en los campos "nombre", "sexo" y "fechanacimiento" pues estos campos admiten 
valores "null"; en el campo "documento", que no admite valores nulos, se 
almacena una cadena vacía. En el tercer registro guarda "null" en los campos 
"nombre", "sexo" y "domicilio", ya que los permiten; en el campo "documento", 
almacena una cadena vacía.

2 comentarios:

  1. Quiero hacer la siguiente corrección:
    En un campo numérico el va lor por defecto no es 0.
    Este caso sólo se da cuando no inserto registros en este campo pero he definido el campo como NOT NULL.
    Todo campo por defecto ya sea cadenas o números por defecto es NULL, ha excepción de los campos ya mencionados en la parte superior.

    ResponderEliminar
  2. Este mismo error se describe en la página de tutoriales ya!! donde tomaste como base esta misma información.
    La única manera de saberlo es realizando un ejercicio sobre la práctica.

    ResponderEliminar