Continuamos con nuestra tabla "libros", definida con la siguiente estructura:
- código, int unsigned, - titulo, varchar(30) not null, - autor, varchar(30), - editorial, varchar (20), - precio, decimal(5,2) unsigned, - cantidad int unsigned.
Queremos modificar el tipo del campo "cantidad", como guardaremos valores que no superarán los 50000 usaremos smallint unsigned, tipeamos:
alter table libros modify cantidad smallint unsigned;
Usamos "alter table" seguido del nombre de la tabla y "modify" seguido del nombre del nuevo campo con su tipo y los modificadores.
Queremos 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;
Hay que tener cuidado al alterar los tipos de los campos de una tabla que ya tiene registros cargados. Si tenemos un campo de texto de longitud 50 y lo cambiamos a 30 de longitud, los registros cargados en ese campo que superen los 30 caracteres, se cortarán.
Igualmente, si un campo fue definido permitiendo valores nulos, se cargaron registros con valores nulos y luego se lo define "not null", todos los registros con valor nulo para ese campo cambiarán al valor por defecto según el tipo (cadena vacía para tipo texto y 0 para numéricos), ya que "null" se convierte en un valor inválido.
Si definimos un campo de tipo decimal(5,2) y tenemos un registro con el valor "900.00" y luego modificamos el campo a "decimal(4,2)", el valor "900.00" 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. Por ejemplo:
alter table libros modify codigo int unsigned auto_increment;
"alter table" combinado con "modify" permite agregar y quitar campos y atributos de campos. Para modificar el valor por defecto ("default") de un campo podemos usar también "modify" pero debemos colocar el tipo y sus modificadores, entonces resulta muy extenso, podemos setear sólo el valor por defecto con la siguienmte sintaxis:
alter table libros alter autor set default 'Varios';
Para eliminar el valor por defecto podemos emplear:
alter table libros alter autor drop default;
PROBLEMA RESUELTO
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.
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, nombre varchar(20) not null, actor varchar(20), director varchar(25), duracion tinyint ); 3- Modifique el campo "duracion" por tinyint unsigned. 4- Modifique el campo "nombre" para poder almacenar una longitud de 40 caracteres y que no permita valores nulos:5- Modifique el campo "actor" para que no permita valores nulos: 6- Intente definir "auto_increment" el campo "codigo" (mensaje de error):Otros problemas:Un comercio que vende artículos de computación registra los datos de sus artículos en una tabla con ese nombre. 1- Elimine "articulos", si existe. 2- Cree la tabla, con la siguiente estructura:create table articulos( codigo int unsigned, nombre varchar(25) not null, descripcion varchar(30), precio decimal(4,2) unsigned, cantidad tinyint, primary key(codigo) ); 3- Modifique el campo "precio" para que pueda guardar valores hasta "9999.99". 4- Modifique el campo "codigo" para que se autoincremente. 5- Modifique el campo "cantidad" para que no permita valores negativos.
No hay comentarios:
Publicar un comentario