13 - Campo entero serial (autoincremento)


Los valores de un campo serial, se inician en 1 y se incrementan en 1 automáticamente.

Se utiliza generalmente en campos correspondientes a códigos de identificación para generar valores únicos para cada nuevo registro que se inserta.

Normalmente se define luego este campo como clave primaria.

Para establecer que un campo autoincremente sus valores automáticamente, éste debe ser de tipo serial:

 create table libros(
  codigo serial,
  titulo varchar(20),
  autor varchar(30),
  editorial varchar(15),
  primary key (codigo)
 );

Para definir un campo autoincrementable lo hacemos con la palabra clave serial.

Hasta ahora, al ingresar registros, colocamos el nombre de todos los campos antes de los valores; es posible ingresar valores para algunos de los campos de la tabla, pero recuerde que al ingresar los valores debemos tener en cuenta los campos que detallamos y el orden en que lo hacemos.

Cuando un campo es de tipo serial no es necesario ingresar valor para él, porque se inserta automáticamente tomando el último valor como referencia, o 1 si es el primero.

Para ingresar registros omitimos el campo definido como serial, por ejemplo:

 insert into libros (titulo,autor,editorial)
  values('El aleph','Borges','Planeta');

Este primer registro ingresado guardará el valor 1 en el campo correspondiente al código.

Si continuamos ingresando registros, el código (dato que no ingresamos) se cargará automáticamente siguiendo la secuencia de autoincremento.

Más adelante cuando veamos el concepto de secuencias veremos que los campos serial son el realidad un campo int que tienen asociado una "secuencia".

Un campo serial podemos indicar el valor en el insert, pero en la siguiente inserción que hagamos la secuencia continúa en el último valor generado automáticamente. Puede tener sentido utilizar esta característica para reutilizar un código de un campo borrado, por ejemplo si en la tabla libros borramos el libro con el código 1, luego podemos insertar otro libro con dicho código:

 delete from libros where codigo=1;
 
 insert into libros (codigo,titulo,autor,editorial)
  values(1,'Aprender Python', 'Rodriguez Luis', 'Paidos');


Retornar