lunes, 5 de noviembre de 2012

49 - Agregar campos a una tabla (alter table - add)


Para modificar la estructura de una tabla existente, usamos "alter table".

"alter table" se usa para:

- agregar nuevos campos,
- eliminar campos existentes,
- modificar el tipo de dato de un campo,
- agregar o quitar modificadores como "null", "unsigned", "auto_increment",
- cambiar el nombre de un campo,
- agregar o eliminar la clave primaria,
- agregar y eliminar índices,
- renombrar una tabla.

"alter table" hace una copia temporal de la tabla original, realiza los cambios en la copia, luego borra la tabla original y renombra la copia.

Aprenderemos a agregar campos a una tabla.

Para ello utilizamos nuestra tabla "libros", definida con la siguiente estructura:

 - código, int unsigned auto_increment, clave primaria,
 - titulo, varchar(40) not null,
 - autor, varchar(30),
 - editorial, varchar (20),
 - precio, decimal(5,2) unsigned.
 
Necesitamos agregar el campo "cantidad", de tipo smallint unsigned not null, tipeamos:

 alter table libros
  add cantidad smallint unsigned not null;
 
Usamos "alter table" seguido del nombre de la tabla y "add" seguido del nombre del nuevo campo con su tipo y los modificadores.

Agreguemos otro campo a la tabla:

 alter table libros
  add edicion date;
 
Si intentamos agregar un campo con un nombre existente, aparece un mensaje de error indicando que el campo ya existe y la sentencia no se ejecuta.

Cuando se agrega un campo, si no especificamos, lo coloca al final, después de todos los campos existentes; podemos indicar su posición (luego de qué campo debe aparecer) con "after":

 alter table libros
 add cantidad tinyint unsigned after autor;
 
 
 
PROBLEMA RESUELTO
 


Trabajamos con la tabla "libros".

Eliminamos la tabla "libros" si existe.

Creamos la tabla "libros" con la siguiente estructura:

 create table libros(
  codigo int unsigned auto_increment,
  titulo varchar(40) not null,
  autor varchar(30),
  editorial varchar (20),
  precio decimal(5,2) unsigned,
  primary key(codigo)
 );
 
Para agregar el campo "cantidad" de tipo smallint unsigned not null, tipeamos:

 alter table libros
 add cantidad smallint unsigned not null;
 
Vemos su nueva estructura:

 describe libros;
 
Ahora la tabla tiene un nuevo campo, el ingresado con "alter table".

Si mostramos todos los registros, vemos que los valores para el nuevo campo se cargaron con su valor por defecto, "0" en el ejemplo porque el campo agregado es de tipo numérico y declarado "not null".

Agreguemos otro campo a la tabla:

 alter table libros
  add edicion date;
 
Vemos la nueva estructura:

 describe libros;
 
Si mostramos todos los registros, vemos que los valores para el nuevo campo se cargaron con su valor por defecto, "null" en este caso.

Si intentamos agregar un campo existente aparece un mensaje de error indicando que la columna existe y la acción no se realiza:

 alter table libros
 add precio int;
 
 
 
PROBLEMA PROPUESTO
 
 
Trabaje con la tabla "peliculas" de un video club.

1- Elimine la tabla, si existe.

2- Cree la tabla con la siguiente estructura:
 
 create table peliculas(
  codigo int unsigned auto_increment,
  nombre varchar(30) not null,
  actor varchar(20),
  primary key(codigo)
 );

3- Ingrese algunos registros.

4- Agregue un campo para almacenar la duración de la película, de tipo 
tinyint unsigned:
  
5- Visualice la estructura de la tabla con "describe".

6- Agregue el campo "director" para almacenar el nombre del director, 
de tipo varchar(20):
 
7- Visualice la estructura de la tabla con su nuevo campo:
 
8- Intente agregar un campo existente. Aparece un mensaje de error: 
 
 
 
Otros problemas:
 
 
 
Un comercio que vende por mayor artículos de librería y papelería tiene una tabla 
llamada "articulos".

1- Elimine la tabla, si existe.

2- Cree la tabla con la siguiente estructura:
 
 create table articulos(
  codigo int unsigned auto_increment,
  nombre varchar(20) not null,
  descripcion varchar(30),
  precio decimal(4,2) unsigned,
  primary key(codigo)
 );

3- Ingrese los siguientes registros:
 
 insert into articulos (nombre,descripcion,precio)
  values('escuadra','plastico 20 cm.',3.50);
 insert into articulos (nombre,descripcion,precio)
  values('lápices colores','Join x12',4.50);
 insert into articulos (nombre,descripcion,precio)
  values('lápices colores','Join x24',7.50);
 insert into articulos (nombre,descripcion,precio)
  values('regla','30 cm.',2.50);
 insert into articulos (nombre,descripcion,precio)
  values('fibras','Join x12',10.30);
 insert into articulos (nombre,descripcion,precio)
  values('fibras','Join x6',5.10);

4- El comercio, que hasta ahora ha vendido sus artículos por mayor, comenzará la venta por menor. 
Necesita alterar la tabla agregando un campo para almacenar el precio por menor para cada artículo. 
Agrege un campo llamado "preciopormenor":

5- Muestre todos los registros:
 
Note que para el nuevo campo los valores se setearon en "null".

6- Actualice el campo "preciopormenor" de todos los registros, dándole el valor del campo "precio" 
incrementado en un 10%:
 
7- Muestre todos los registros:
 
 

 
 
 

1 comentario:

  1. como puedo alterar la tabla para que el campo que unsigned, deje de serlo?

    ResponderEliminar