primary foreign data create autoincrement sql sqlite

foreign - sqlite primary key autoincrement



SQLite Multi-Primary Key en una tabla, uno de ellos es Auto Incremento (4)

No, no creo que esto sea posible.

Puede crear un UNIQUE INDEX que tenga esencialmente el mismo efecto que una CLAVE PRIMARIA:

CREATE UNIQUE INDEX pk_index ON "table1"("field1","field2");

Además, no veo la lógica de su esquema, es decir, si una columna es de autoincremento y no tiene la intención de alterar los valores manualmente, será única de todos modos, por lo que es una buena clave principal corta y sencilla . ¿Por qué el compuesto? Sin embargo, puede tener buenas razones para hacer otro índice en la combinación de columnas.

Tengo varias claves primarias (compuestas) en una tabla y una de ellas será el incremento automático. Sin embargo, es interesante que SQLite permite el uso de la palabra clave AUTOINCREMENT justo después de una palabra clave obligatoria PRIMARY KEY .

Mi consulta es:

CREATE TABLE ticket ( id INTEGER PRIMARY KEY AUTOINCREMENT, seat TEXT, payment INTEGER, PRIMARY KEY (id, seat))

Sin embargo, el error es que la table "ticket" has more than one primary key .

En realidad puedo evitar otras claves primarias para esta tabla. Pero estoy codificando un marco ORM (demonios, sí, estoy loco) y no quiero cambiar la estructura de la generación de restricciones PRIMARY KEY para una tabla (porque está permitido en MySQL afaik).

¿Alguna solución a esto?


Sorprendentemente, pude implementar un incremento automático para SqLite con claves compuestas con la sintaxis exactamente igual con SQL Server:

Usar IDENTITY (1,1)

create table [dbo].[Person] { ID int IDENTITY (1,1) not null, CompositeID1 int not null, CompositeID2 int not null, constraint [pk_person] primary key clustered (ID asc, CompositeID1 asc, CompositeID2 asc) }


También puedes escribir así:

CREATE TABLE ticket ( id INTEGER PRIMARY, seat TEXT, payment INTEGER, PRIMARY KEY (id, seat))


UNIQUE INDEX solo no tiene el mismo efecto que la PRIMARY KEY . Un índice único permitirá un NULL; una restricción de clave primaria no lo hará. Es mejor declarar ambas restricciones.

CREATE TABLE ticket ( id INTEGER PRIMARY KEY AUTOINCREMENT, seat TEXT NOT NULL, payment INTEGER, UNIQUE (id, seat));

También debe pensar detenidamente si realmente necesita aceptar pagos NULL.