domingo, 8 de abril de 2012

22 - Atributo default en una columna de una tabla.

Si al insertar registros no se especifica un valor para un campo, se inserta su valor por defecto implícito según el tipo de dato del campo. Por ejemplo:

insert into libros (titulo,autor,editorial,precio,cantidad)
 values('Java en 10 minutos','Juan Pereyra','Paidos',25.7,100);
 
Como no ingresamos valor para el campo "codigo", MySQL insertará el valor por defecto, como "codigo" es un campo "auto_increment", el valor por defecto es el siguiente de la secuencia.

Si omitimos el valor correspondiente al autor:

insert into libros (titulo,editorial,precio,cantidad)
 values('Java en 10 minutos','Paidos',25.7,200);
 
MySQL insertará "null", porque el valor por defecto de un campo (de cualquier tipo) que acepta valores nulos, es "null".

Lo mismo sucede si no ingresamos el valor del precio:

insert into libros (titulo,autor,editorial,cantidad)
 values('Java en 10 minutos','Juan Pereyra',Paidos',150);
 
MySQL insertará el valor "null" porque el valor por defecto de un campo (de cualquier tipo) que acepta valores nulos, es "null".

Si omitimos el valor correspondiente al título:

insert into libros (autor,editorial,precio,cantidad)
 values ('Borges','Paidos',25.7,200);
 
MySQL guardará una cadena vacía, ya que éste es el valor por defecto de un campo de tipo cadena definido como "not null" (no acepta valores nulos).

Si omitimos el valor correspondiente a la cantidad:

insert into libros (titulo,autor,editorial,precio)
 values('Alicia a traves del espejo','Lewis Carroll','Emece',34.5);
 
el valor que se almacenará será 0, porque el campo "precio" es de tipo numérico "not null" y el valor por defecto de los tipos numéricos que no aceptan valores nulos es 0.

Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del campo "precio" sea 1.11 y el valor por defecto del campo "autor" sea "Desconocido":

create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(40) not null,
  autor varchar(30) default 'Desconocido', 
  precio decimal(5,2) unsigned default 1.11,
  cantidad int unsigned not null,
  primary key (codigo)
 );
 
Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "precio", MySQL insertará los valores por defecto definidos con la palabra clave "default":

insert into libros (titulo,editorial,cantidad)
 values('Java en 10 minutos','Paidos',200);
 
MySQL insertará el registro con el siguiente valor de la secuencia en "codigo", con el título, editorial y cantidad ingresados, en "autor" colocará "Desconocido" y en precio "1.11".

Entonces, si al definir el campo explicitamos un valor mediante la cláusula "default", ése será el valor por defecto; sino insertará el valor por defecto implícito según el tipo de dato del campo.

Los campos definidos "auto_increment" no pueden explicitar un valor con "default", tampoco los de tipo "blob" y "text".

Los valores por defecto implícitos son los siguientes:

-para campos de cualquier tipo que admiten valores nulos, el valor por defecto "null";
-para campos que no admiten valores nulos, es decir, definidos "not null", el valor por defecto depende del tipo de dato:
-para campos numéricos no declarados "auto_increment": 0;
-para campos numéricos definidos "auto_increment": el valor siguiente de la secuencia, comenzando en 1;
-para los tipos cadena: cadena vacía.

Ahora al visualizar la estructura de la tabla con "describe" podemos entender un poco más lo que informa cada columna:

describe libros;
 
"Field" contiene el nombre del campo; "Type", el tipo de dato; "NULL" indica si el campo admite valores nulos; "Key" indica si el campo está indexado (lo veremos más adelante); "Default" muestra el valor por defecto del campo y "Extra" muestra información adicional respecto al campo, por ejemplo, aquí indica que "codigo" está definido "auto_increment".

También se puede utilizar "default" para dar el valor por defecto a los campos en sentencias "insert", por ejemplo:

insert into libros (titulo,autor,precio,cantidad)
 values ('El gato con botas',default,default,100);
 
 
 
 
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(40) not null, editorial varchar(15), autor varchar(30) default 'Desconocido', precio decimal(5,2) unsigned default 1.11, cantidad mediumint unsigned not null, primary key (codigo) ); 
 Ingresamos algunos registros omitiendo algunos campos para ver cómo trabaja la cláusula "default".

insert into libros (titulo,autor,editorial,precio,cantidad) values('Java en 10 minutos','Juan Pereyra','Paidos',25.7,100); 
 Como no ingresamos valor para el campo "codigo", se insertará el valor por defecto implícito, como "codigo" es un campo "auto_increment", el valor por defecto es el siguiente de la secuencia.
Si omitimos el valor correspondiente al título:

insert into libros (autor,editorial,precio,cantidad) values('Juan Perez','Planeta',28.50,50); 
 MySQL insertará una cadena vacía, porque el valor por defecto de un campo de tipo caracter definido como "not null" es ese y para el código, seguirá con la secuencia.

Lo mismo sucede si no ingresamos un valor para la editorial:


insert into libros (titulo,autor,precio,cantidad) values('Aprenda PHP','Alberto Lopez',55.40,150); Se almacenará una cadena vacía.

Si omitimos el valor correspondiente al autor:

insert into libros (titulo,editorial,precio,cantidad) values ('El gato con botas','Emece',15.6,150); 
 Se guardará "Desconocido" ya que éste es el valor por defecto que explicitamos al definir el campo.
Si omitimos el valor correspondiente al precio:

insert into libros (titulo,autor,editorial,cantidad) values ('El aleph','Borges','Emece',200); 
 Se guardará "1.11" ya que éste es el valor por defecto que explicitamos al definir el campo.
Si omitimos el valor correspondiente a la cantidad:

insert into libros (titulo,autor,editorial,precio) values('Alicia a traves del espejo','Lewis Carroll', 'Emece',34.5); 
 el valor que se almacenará será 0, porque con la cláuslua "default" establecimos este valor por defecto para este campo.

También podemos usar "default" para dar el valor por defecto a los campos en sentencias "insert", por ejemplo:

insert into libros (titulo,autor,editorial,precio,cantidad) values ('El gato con botas',default,'Planeta',default,100); 
 
 
Problema Propuesto:

Un comercio que envía pizzas y empanadas a domicilio registra 
los pedidos diariamente en una tabla llamada "pedidos" con los 
siguientes datos:
 - numero de pedido, autoincrementable, entero positivo comienza 
en 1 y menor a 200 aprox.
 - nombre: pizza o empanada, por defecto "empanada",
 - tipo: por ejemplo, si es pizza: especial, muzarela, etc., si 
son empanadas: arabes, pollo, jamón y queso, criollas, etc.
 - precio: precio por unidad, valor con decimales que no supera 
los $99.99 y será siempre mayor a 0, por defecto "1",
 - cantidad: cantidad de articulos, entero positivo desde 1 e 
inferior a 200 aprox., por defecto "12"
 - domicilio del cliente.

1- Elimine la tabla "pedidos" si existe.

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo.

3- Ingrese los siguientes registros:
 (nombre,tipo,precio,cantidad,domicilio)
  piza,muzarela,4.00,3,Sarmiento 235
  arabe,1.00,24,Urquiza 296
  empanada,salteña,Colon 309
  arabe,San Martin 444
  piza,especial,4.00,Avellaneda 395

4- Muestre todos los campos de todos los pedidos para ver cómo se 
guardaron los datos no ingresados.
 
 
Otros problemas: 
A) Un comercio que tiene un stand en una feria registra 
en una tabla llamada "visitantes" algunos datos de las 
personas que visitan o compran en su stand para luego 
enviarle publicidad de sus productos.

1- Elimine la tabla "visitantes", si existe.

2- Cree la tabla con la siguiente estructura:
 
create table visitantes(
  nombre varchar(30) not null,
  edad tinyint unsigned,
  sexo char(1) default 'f',
  domicilio varchar(30),
  ciudad varchar(20) default 'Cordoba',
  telefono varchar(11),
  mail varchar(30) default 'no tiene',
  montocompra decimal (6,2)
 );

4- Ingrese algunos registros sin especificar valores 
para algunos campos para ver cómo opera la cláusula "default".

5- Muestre todos los registros.


B) Una pequeña biblioteca de barrio registra los préstamos 
de sus libros en una tabla llamada "prestamos". En ella almacena 
la siguiente información: título del libro, documento de 
identidad del socio a quien se le presta el libro, fecha 
de préstamo, fecha en que tiene que devolver el libro y si 
el libro ha sido o no devuelto.

1- Elimine la tabla "prestamos" si existe.

2- Cree la tabla: 
 
create table prestamos(
  titulo varchar(40) not null,
  documento char(8) not null,
  fechaprestamo date not null,
  fechadevolucion date,
  devuelto char(1) default 'n'
 );

3- Ingrese algunos registros:
 
 (titulo,documento,fechaprestamo,fechadevolucion)
  Manual de 1 grado,23456789,2006-08-10,2006-08-12
  Alicia en el pais de las maravillas,23456789,2006-08-12,2006-08-14
  El aleph,22543987,2006-08-15,2006-08-17
  Manual de geografia 5 grado,25555666,2006-08-30,2006-09-01

4- Seleccione todos los registros para ver qué se guardó en el campo 
"devuelto" para el cual no ingresamos datos.
 
 
 
 

No hay comentarios:

Publicar un comentario