Un campo de tipo entero puede tener otro atributo extra 'auto_increment'. Los valores de un campo 'auto_increment', 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.
Sólo puede haber un campo "auto_increment" y debe ser clave primaria (o estar indexado).
Para establecer que un campo autoincremente sus valores automáticamente, éste debe ser entero (integer) y debe ser clave primaria:
create table libros( codigo int auto_increment, titulo varchar(20), autor varchar(30), editorial varchar(15), primary key (codigo) );
Para definir un campo autoincrementable colocamos "auto_increment" luego de la definición del campo al crear la tabla.
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 tiene el atributo "auto_increment" 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 "auto_increment", 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.
Un campo "auto_increment" funciona correctamente sólo cuando contiene únicamente valores positivos. Más adelante explicaremos cómo definir un campo con sólo valores positivos.
Está permitido ingresar el valor correspondiente al campo "auto_increment", por ejemplo:
insert into libros (codigo,titulo,autor,editorial) values(6,'Martin Fierro','Jose Hernandez','Paidos');
Pero debemos tener cuidado con la inserción de un dato en campos "auto_increment". Debemos tener en cuenta que:
- si el valor está repetido aparecerá un mensaje de error y el
registro no se ingresará. - si el valor dado saltea la secuencia, lo toma igualmente y en
las siguientes inserciones, continuará la secuencia tomando el valor
más alto. - si el valor ingresado es 0, no lo toma y guarda el registro
continuando la secuencia. - si el valor ingresado es negativo (y el campo no está definido
para aceptar sólo valores positivos), lo ingresa.
Para que este atributo funcione correctamente, el campo debe contener solamente valores positivos; más adelante trataremos este tema.
Problema Resuelto:
Trabajamos con la tabla "libros" de una librería.
Eliminamos la tabla, si existe:
drop table if exists libros;
Creamos la tabla estableciendo como clave primaria y "auto_increment" el campo "codigo":
create table libros( codigo integer auto_increment, titulo varchar(20), autor varchar(30), editorial varchar(15), primary key (codigo) );
Al visualizar la estructura de la tabla:
describe libros;
vemos que en la columna "EXTRA" del campo "codigo" aparece "auto_increment", esto significa que el campo es autoincrementable, en la columna "KEY" aparece "PRI", es clave primaria.
Ingresamos algunos registros:
insert into libros (titulo,autor,editorial) values('El aleph','Borges','Planeta');
Note que al detallar los campos para los cuales ingresaremos valores hemos omitido "codigo"; cuando un campo es "auto_increment" no es necesario ingresar valor para él, porque se genera automáticamente. Recuerde que si es obligatorio ingresar los datos de todos los campos que se detallan y en el mismo orden.
Si mostramos los registros:
select * from libros;
vemos que este primer registro ingresado guardó el valor 1 en el campo correspondiente al código, comenzó la secuencia en 1.
Ingresamos más registros:
insert into libros (titulo,autor,editorial) values('Martin Fierro','Jose Hernandez','Emece'); insert into libros (titulo,autor,editorial) values('Aprenda PHP','Mario Molina','Emece'); insert into libros (titulo,autor,editorial) values('Cervantes y el quijote','Borges','Paidos'); insert into libros (titulo,autor,editorial) values('Matematica estas ahi', 'Paenza', 'Paidos');
Seleccionamos todos los registros:
select codigo,titulo,autor,editorial from libros;
Vemos que el código, dato que no ingresamos, se cargó automáticamente siguiendo la secuencia de autoincremento.
Está permitido ingresar el valor correspondiente al campo "auto_increment", por ejemplo:
insert into libros (codigo,titulo,autor,editorial) values(6,'Martin Fierro','Jose Hernandez','Paidos');
Pero debemos tener cuidado con la inserción de un dato en campos "auto_increment".
Veamos los distintos casos.
Si ingresamos un valor repetido, aparecerá un mensaje de error y el registro no se ingresará:
insert into libros (codigo,titulo,autor,editorial) values(2,'Martin Fierro','Jose Hernandez','Planeta');
Si ingresamos un valor que no sigue la secuencia, el dato es válido, lo toma, por ejemplo:
insert into libros (codigo,titulo,autor,editorial) values(15,'Harry Potter y la piedra filosofal','J.K. Rowling','Emece');
El siguiente registro insertado tomará el valor más alto para seguir la secuencia (en este caso 16):
insert into libros (titulo,autor,editorial) values('Harry Potter y la camara secreta','J.K. Rowling','Emece');
Si ingresamos 0, no lo toma y guarda el registro continuando la secuencia (17 en este caso):
insert into libros (codigo,titulo,autor,editorial) values(0,'Alicia en el pais de las maravillas','Lewis Carroll','Planeta');
Si ingresamos un valor negativo (y el campo no está definido para aceptar sólo valores positivos), lo ingresa:
insert into libros (codigo,titulo,autor,editorial) values(-5,'Alicia a traves del espejo','Lewis Carroll','Planeta');
Problema Propuesto:
Una farmacia guarda información referente a sus medicamentos en una tabla llamada "medicamentos". 1- Elimine la tabla,si existe: 2- Cree la tabla con la siguiente estructura:
create table medicamentos( codigo integer auto_increment, nombre varchar(20), laboratorio varchar(20), precio float, cantidad integer, primary key (codigo) ); 3- Visualice la estructura de la tabla "medicamentos". 4- Ingrese los siguientes registros: (nombre, laboratorio,precio,cantidad) Sertal,Roche,5.2,100 Buscapina,Roche,4.10,200 Amoxidal 500,Bayer,15.60,100 5- Verifique que el campo "código" generó los valores de modo automático: 6- Intente ingresar un registro con un valor de clave primaria repetido. 7- Ingrese un registro con un valor de clave primaria no repetido salteando la secuencia: 8- Ingrese el siguiente registro: Note que sigue la secuencia.
Otros problemas:
Un videoclub almacena información sobre sus películas en una tabla llamada
"peliculas". 1- Elimine la tabla si existe. 2- Créela con la siguiente estructura: -codigo (entero), autoincremento, -titulo (cadena de 30), -actor (cadena de 20), -duracion (entero), -clave primaria: codigo. 3- Visualice la estructura de la tabla "peliculas". 4- Ingrese los siguientes registros: (titulo,actor,duracion) Mision imposible,Tom Cruise,120 Harry Potter y la piedra filosofal,xxx,180 Harry Potter y la camara secreta,xxx,190 Mision imposible 2,Tom Cruise,120 La vida es bella,zzz,220
5- Seleccione todos los registros y verifique la carga automática de los códigos. 6- Actualice las películas cuyo código es 3 colocando en "actor" 'Daniel R.' 7- Elimine la película 'La vida es bella'. 8- Elimine todas las películas cuya duración sea igual a 120 minutos. 9- Visualice los registros. 10- Ingrese el siguiente registro, sin valor para la clave primaria: Mujer bonita,Richard Gere,120
Note que sigue la secuencia tomando el último valor generado, aunque ya no esté. 11- Ingrese el siguiente registro, con valor para la clave primaria: 1,Tootsie,D. Hoffman,90
Lo acepta porque la clave no está repetida. 12- Intente ingresar un registro con valor de clave repetida. 13- Ingrese el siguiente registro, sin valor para la clave primaria: Un oso rojo,Julio Chavez,100
Note que sigue la secuencia.
No hay comentarios:
Publicar un comentario