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

问题描述

|| 我在一个表上有多个(复合)主键,其中之一将是自动递增。但是,有趣的是,SQLite允许在必选的
PRIMARY KEY
关键字之后使用
AUTOINCREMENT
关键字。 我的查询是:
CREATE TABLE ticket (
     id INTEGER PRIMARY KEY AUTOINCREMENT,seat TEXT,payment INTEGER,PRIMARY KEY (id,seat))
但是错误是is3ѭ。 实际上,我可以避免使用该表的其他主键。但是我正在编码一个ORM框架(是的,我很疯狂),并且不想更改表的
PRIMARY KEY
约束生成的结构(因为MySQL afaik允许使用)。 有什么解决办法吗?     

解决方法

        不,我认为这是不可能的。 您可以创建一个
UNIQUE INDEX
,其效果与主键基本相同:
CREATE UNIQUE INDEX pk_index ON \"table1\"(\"field1\",\"field2\");
此外,我看不到您的架构的逻辑,即->如果列是自动递增的,并且您不打算手动弄乱值,那么无论如何它将是唯一的,因此非常有用简单的短主键。为什么要复合?但是,您可能有充分的理由对列的组合进行另一个索引。     ,        单独的
UNIQUE INDEX
PRIMARY KEY
具有不同的效果。唯一索引将允许为NULL;主键约束不会。最好同时声明这两个约束。
CREATE TABLE ticket (
     id INTEGER PRIMARY KEY AUTOINCREMENT,seat TEXT NOT NULL,payment INTEGER,UNIQUE (id,seat));
您还应该认真考虑是否真的需要接受NULL付款。     ,        您也可以这样写:
CREATE TABLE ticket (
     id INTEGER PRIMARY,seat TEXT,PRIMARY KEY (id,seat))
    ,        出乎意料的是,我能够使用复合键为SqLite实现自动递增,其语法与SQL Server完全相同: 使用
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)
}
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...