51 - Modificar campos de una tabla (alter table - modify)


Problema:

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

Eliminamos la tabla "libros" si existe.

Creamos la tabla "libros" con la siguiente estructura:

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

Para modificar el tipo del campo "cantidad" por "smallint unsigned", tipeamos:

 alter table libros
  modify cantidad smallint unsigned;

Si visualizamos la estructura de la tabla:

 describe libros;

vemos la nueva definición del campo "cantidad".

Para modificar el tipo del campo "titulo" para poder almacenar una longitud de 40 caracteres y que no permita valores nulos, tipeamos:

 alter table libros
  modify titulo varchar(40) not null;

Visualicemos la estructura de la tabla:

 describe libros;

Ahora el campo "titulo" permite 40 caracteres de longitud.

Ingresemos algunos registros:

 insert into libros (titulo,autor,editorial,precio,cantidad)
  values ('El aleph','Borges','Planeta',23.5,100);
 insert into libros (titulo,autor,editorial,precio,cantidad)
  values ('Alicia en el pais de las maravillas','Lewis Carroll','Emece',25,200);
 insert into libros (titulo,autor,editorial,precio,cantidad)
  values ('El gato con botas',null,'Emece',10,500);
 insert into libros (titulo,autor,editorial,precio,cantidad)
  values ('Martin Fierro','Jose Hernandez','Planeta',150,200);

Modificamos el tipo de dato de "autor" a 10 caracteres de longitud:

 alter table libros
  modify autor varchar(10);

Mostramos todos los registros:

 select * from libros;

Note que los nombres de los autores que tenían más de 10 caracteres se cortaron.

Modificamos el tipo de dato de "autor" para que no permita valores nulos:

 alter table libros
  modify autor varchar(10) not null;

Mostramos todos los registros:

 select * from libros;

Note que en el campo "autor" del libro "El gato con botas", ahora tiene una cadena vacía, lo habíamos cargado con "null", pero al redefinir el campo como no nulo, "null" se convirtió en un valor inválido.

El libro "Martín Fierro" tiene un precio de $150; si modificamos el tipo de dato de "precio" a "decimal(4,2), el precio anterior quedará fuera del rango:

 alter table libros
  modify precio decimal(4,2);

Mostramos todos los registros:

 select * from libros,

Note que el valor "150" se convierte en un valor inválido para el tipo, entonces guarda en su lugar, el valor límite más cercano, "99.99".

Si intentamos definir "auto_increment" un campo que no es clave primaria, aparece un mensaje de error indicando que el campo debe ser clave primaria:

 alter table libros
  modify codigo int unsigned auto_increment;

La sentencia no se ejecuta.




Retornar