Listado completo de tutoriales

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.

Servidor de MySQL instalado en forma local.

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:

drop table if exists libros;

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
 );

-- establecemos el campo "codigo" como clave primaria:
alter table libros
  add primary key (codigo);

describe libros;

--  intentamos agregar otra clave primaria (produce error):
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;

alter table libros
  drop primary key;

alter table libros
  modify codigo int unsigned;

alter table libros
  drop primary key;

describe libros;

Genera una salida similar a esta:

MySQL alter table drop primary add primary key

Retornar