¿Cómo puedo poner un campo autoincremento en una base de datos SQLite? estoy desarrollando una aplicación para Android con acceso a bases de datos SQLite, he usado como base vuestro artículo:
Y necesito crear un campo clave primeria en una tabla que se vaya incrementando automáticamente pero no veo ningún tipo de datos para ello en SQLite.
Publicado:
Lun Ene 21, 2013 7:02 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Autoincremento en SQLite
Anuncios
varios escribió:
¿Cómo puedo poner un campo autoincremento en una base de datos SQLite? estoy desarrollando una aplicación para Android con acceso a bases de datos SQLite, he usado como base vuestro artículo:
Y necesito crear un campo clave primeria en una tabla que se vaya incrementando automáticamente pero no veo ningún tipo de datos para ello en SQLite.
En SQLite no es necesario que definas un campo como autoincremento, es suficiente con que crees la tabla de la siguiente forma:
Código:
create table factura (
codigo int primary key,
fecha date,
codigocliente int,
importe money
);
En el ejemplo anterior el campo autoincremento será "codigo", al ser de tipo "int" y "primary key". Para realizar el insert sería:
Código:
insert into factura values
(
null,
current_date,
1,
1000
);
Como ves en el campo "codigo" establecemos el valor "null" para que sea el propio SQLite quien establezca el valor que le corresponde al autoincremento. Para el campo "fecha" hemos usado la función "current_date" de SQLite que devuelve la fecha actual del equipo.
Si no usas "null" también puedes asignar el valor "rowid", como indica SQLite en su documentación If no ROWID is specified on the insert, or if the specified ROWID has a value of NULL, then an appropriate ROWID is created automatically.[/i]
Ultima edición por alonsojpd el Dom Jun 02, 2013 6:59 pm, editado 1 vez
Publicado:
Lun Ene 21, 2013 7:10 pm
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: [RESUELTO] Autoincremento en SQLite
Anuncios
alonsojpd escribió:
En SQLite no es necesario que definas un campo como autoincremento, es suficiente con que crees la tabla de la siguiente forma:
Código:
create table factura (
codigo int primary key,
fecha date,
codigocliente int,
importe money
);
En el ejemplo anterior el campo autoincremento será "codigo", al ser de tipo "int" y "primary key". Para realizar el insert sería:
Código:
insert into factura values
(
null,
current_date,
1,
1000
);
Como ves en el campo "codigo" establecemos el valor "null" para que sea el propio SQLite quien establezca el valor que le corresponde al autoincremento. Para el campo "fecha" hemos usado la función "current_date" de SQLite que devuelve la fecha actual del equipo.
Estupendo, tal y como me has indicado, me funciona de perfectamente.
Publicado:
Lun Ene 21, 2013 7:12 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: [RESUELTO] Autoincremento en SQLite3
Anuncios
Os indicamos que para la versión 3 de SQLite disper de la cláusula "autoincrement" al igual que otros motores de base de datos. Por tanto, para crear un campo autoincremento en SQLite3 sería algo así:
Código:
create table factura (
codigo int primary key autoincrement,
fecha date,
codigocliente int,
importe money
);
En realidad, lo que hace SQLite al introducir "autoincrement" es crear automáticamente la tabla "sqlite_sequence" (si no existía previamente, la crea al crear el primer autoincrement o secuencia) y añade un registro con el nombre de la tabla y el valor del autoincremento. Posteriormente cuando se añada un registro en la tabla con autoincremento hará un update sobre dicha tabla sqlite_sequence e incrementará el valor del registro correspondiente a la tabla.
Como vemos y por filosofía de SQLite todo muy transparente y sencillo. Con un simple:
Código:
select * from sqlite_sequence;
podremos consultar todas las secuencias que tengamos en nuestra base de datos SQLite y por lo tanto, si queremos modificar el valor de alguna de las secuencias (sean autoincrementos de tablas o lo que sea) podremos realizar un:
Código:
update sqlite_sequence
set seq=0
where name='nombre_tabla'
Con el código anterior resetearemos un campo autoincremento (o lo que sea) para la tabla "nombre_tabla".
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A