primary foreign example ejemplo create autoincrement auto_increment sql sqlite sqlite3 auto-increment

foreign - Campo de clave no primaria de incremento automático de SQLite



sqlite sequence (4)

Mi respuesta es muy similar a la de Icarus, así que no necesito mencionarlo.

Puede utilizar la solución de Icarus de una manera más avanzada si es necesario. A continuación se muestra un ejemplo de la tabla de disponibilidad de asientos para un sistema de reserva de trenes.

insert into Availiability (date,trainid,stationid,coach,seatno) values ( ''11-NOV-2013'', 12076, ''SRR'', 1, (select max(seatno)+1 from Availiability where date=''11-NOV-2013'' and trainid=12076 and stationid=''SRR'' and coach=1) );

¿Es posible tener una clave no primaria que se incremente automáticamente con cada inserción?

Por ejemplo, quiero tener un registro, donde cada entrada del registro tenga una clave principal (para uso interno) y un número de revisión (un valor INT que deseo que se incremente automáticamente).

Como solución alternativa, esto podría hacerse con una secuencia, aunque creo que las secuencias no son compatibles con SQLite.


Podría usar un disparador ( http://www.sqlite.org/lang_createtrigger.html ) que verifique el valor más alto anterior y luego lo incremente, o si está haciendo sus inserciones en un procedimiento almacenado, ponga esa misma lógica allí. .


Puedes hacer seleccionar max (id) +1 cuando hagas la inserción.

Por ejemplo:

INSERT INTO Log (id, rev_no, description) VALUES ((SELECT MAX(id) + 1 FROM log), ''rev_Id'', ''some description'')

Tenga en cuenta que esto fallará en una tabla vacía ya que no habrá un registro con id es 0, pero puede agregar una primera entrada ficticia o cambiar la declaración de SQL a esto:

INSERT INTO Log (id, rev_no, description) VALUES ((SELECT IFNULL(MAX(id), 0) + 1 FROM Log), ''rev_Id'', ''some description'')


SQLite crea un ID de fila único (rowid) automáticamente. Este campo generalmente se omite cuando se usa "seleccionar * ...", pero se puede obtener este ID usando "seleccionar rowid, * ...". Tenga en cuenta que, según la documentación de SQLite, desalientan el uso del autoincremento.

create table myTable ( code text, description text ); insert into myTable values ( ''X'', ''some descr.'' ); select rowid, * from myTable;

:: El resultado será; 1 | X | algunos descr.

Si usa este ID como clave foránea, puede exportar el ID de fila (Y) e importar el valor correcto para mantener la integridad de los datos;

insert into myTable values( rowid, code text, description text ) values ( 1894, ''X'', ''some descr.'' );