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