martes, 6 de noviembre de 2012

53 - Agregar y eliminar la clave primaria (alter table)



Hasta ahora hemos aprendido a definir una clave primaria al momento de crear una tabla. Con "alter table" podemos agregar una clave primaria a una tabla existente.

Continuamos con nuestra tabla "libros", definida con la siguiente estructura:

 - código, int unsigned auto_increment,
 - titulo, varchar(40),
 - autor, varchar(30),
 - editorial, varchar (20),
 - precio, decimal(5,2) unsigned,
 - cantidad smallint unsigned.

Para agregar una clave primaria a una tabla existente usamos:

 alter table libros
  add primary key (codigo);

Usamos "alter table" con "add primary key" y entre paréntesis el nombre del 
campo que será clave.
Si intentamos agregar otra clave primaria, aparecerá un mensaje de error porque (recuerde) una tabla solamente puede tener una clave primaria.

Para que un campo agregado como clave primaria sea autoincrementable, es necesario agregarlo como clave y luego redefinirlo con "modify" como "auto_increment". No se puede agregar una clave y al mismo tiempo definir el campo autoincrementable. Tampoco es posible definir un campo como autoincrementable y luego agregarlo como clave porque para definir un campo "auto_increment" éste debe ser clave primaria.
También usamos "alter table" para eliminar una clave primaria.

Para eliminar una clave primaria usamos:

 alter table libros
  drop primary key;

Con "alter table" y "drop primary key" eliminamos una clave primaria definida 
al crear la tabla o agregada luego.

Si queremos eliminar la clave primaria establecida en un campo "auto_increment" aparece un mensaje de error y la sentencia no se ejecuta porque si existe un campo con este atributo DEBE ser clave primaria. Primero se debe modificar el campo quitándole el atributo "auto_increment" y luego se podrá eliminar la clave.

Si intentamos establecer como clave primaria un campo que tiene valores repetidos, aparece un mensaje de error y la operación no se realiza.


PROBLEMA RESUELTO


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

Eliminamos la tabla si existe.

Creamos la tabla "libros" con la siguiente estructura:

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

Para establecer el campo "codigo" como clave primaria usamos:

 alter table libros
  add primary key (codigo);

Visualicemos la estructura de la tabla:

 describe libros;

Ahora el campo "codigo" es clave primaria.

Si intentamos agregar otra clave primaria, aparecerá un mensaje de error porque (recuerde) una tabla solamente puede tener una clave primaria:

 alter table libros
  add primary key (titulo);

Si queremos que el campo clave sea "auto_increment" debemos modificarlo 
con:

 alter table libros
  modify codigo int unsigned auto_increment;

Si intentamos eliminar la clave primaria:

 alter table libros
  drop primary key;

la sentencia no se ejecuta porque si existe un campo con este atributo DEBE 
ser clave primaria.

Primero debemos modificar el campo quitándole dicho atributo:

 alter table libros
  modify codigo int unsigned;

Ahora si podemos eliminar la clave primaria:

 alter table libros
  drop primary key;

Si visualizamos la estructura de la tabla:

 describe libros;
vemos que la tabla ya no tiene clave primaria.


PROBLEMA PROPUESTO


Trabaje con la tabla llamada "medicamentos" de una farmacia.

1- Elimine la tabla, si existe:
 2- Cree la tabla con la siguiente estructura:
 create table medicamentos(
  codigo int unsigned not null,
  nombre varchar(20) not null,
  laboratorio varchar(20),
  precio decimal(6,2) unsigned
);

3- Visualice la estructura de la tabla "medicamentos".

4- Agregue una clave primaria por "codigo":
 
La clave agregada, no es auto_increment, por ello, al agregar registros debemos
ingresar el código, si no lo hacemos, se almacenará el valor "0" en el primer 
registro agregado:
y si intentamos agregar más registros, aparecerá un mensaje indicando que la 
clave está repetida:
 
5- Para solucionar esto podemos modificar el campo convirtiéndolo en 
autoincrementable:
 
6- Veamos los registros:
 
El código se alteró, ahora tiene el valor "1".

7- Ingrese más registros:
 insert into medicamentos (nombre, laboratorio,precio)
  values('Paracetamol 500','Bago',1.90);
 insert into medicamentos (nombre, laboratorio,precio)
  values('Bayaspirina','Bayer',2.10);

8- Intente eliminar la clave primaria:
 
Aparece un mensaje de error. La clave no se puede eliminar porque el campo 
"codigo" es "auto_increment" y si existe un campo con este atributo DEBE ser 
clave primaria.

9- Modifique el campo "codigo" quitándole el atributo "auto_increment":
 
10- Elimine la clave primaria:
 


Otros problemas: 

Una pequeña biblioteca de barrio registra los préstamos de sus libros en una 
tabla llamada "prestamos".

1- Elimine la tabla "prestamos" si existe.

2- Cree la tabla:
 create table prestamos(
  codigo int unsigned,
  titulo varchar(40) not null,
  documento char(8) not null,
  fechaprestamo date not null,
  fechadevolucion date,
  devuelto char(1) /* si se devolvió 's' sino 'n'*/
 );

3- Agregue una clave primaria compuesta por "codigo" y "fechaprestamo":
 
4- Intente agregar un registro con clave repetida.

5- Elimine la clave primaria:
 


No hay comentarios:

Publicar un comentario