表上的SQLite多主键,其中之一是自动增量

Ahm*_*gle 18 sql sqlite

我在表上有多个(复合)主键,其中一个将自动递增.然而,有趣的是,SQLite允许AUTOINCREMENT在强制性PRIMARY KEY关键字之后使用关键字.

我的查询是:

CREATE TABLE ticket (
     id INTEGER PRIMARY KEY AUTOINCREMENT,
     seat TEXT, payment INTEGER,
     PRIMARY KEY (id, seat))
Run Code Online (Sandbox Code Playgroud)

但是错误是table "ticket" has more than one primary key.

实际上我可以避免使用此表的其他主键.但是我正在编写一个ORM框架(地狱是的,我很疯狂)并且不想改变PRIMARY KEY表的约束生成结构(因为它在MySQL afaik中是允许的).

对此有何解决方案?

Mik*_*ll' 25

UNIQUE INDEX单独的效果不一样PRIMARY KEY.唯一索引将允许NULL; 主键约束不会.你最好宣布这两个限制.

CREATE TABLE ticket (
     id INTEGER PRIMARY KEY AUTOINCREMENT,
     seat TEXT NOT NULL, 
     payment INTEGER,
     UNIQUE (id, seat));
Run Code Online (Sandbox Code Playgroud)

您还应该仔细考虑是否真的需要接受NULL付款.


ste*_*lin 12

不,我不认为这是可能的.

您可以创建一个UNIQUE INDEX与PRIMARY KEY基本相同的效果:

CREATE UNIQUE INDEX pk_index ON "table1"("field1","field2");
Run Code Online (Sandbox Code Playgroud)

此外,我没有看到你的模式的逻辑,即 - >如果一个列是自动增量而你不打算手动弄乱这些值,它无论如何都会是唯一的,所以它是一个很好的简单的短主键.复合材料为什么?但是,您可能有充分的理由在列组合上创建另一个索引.

  • 如果要(手动)复制数据库,则自动增量列在数据库副本之间不一定是唯一的.如果向行添加第二列,指示其生成的服务器的唯一ID,则可解决此类冲突. (2认同)