我找不到任何文档说你不能在主键字段上有默认值。但是,我使用此测试代码的实验并未成功。它被接受为有效,但只生成 (n+1( 的值。它适用于非主键字段。
CREATE Table A (
id INTEGER PRIMARY KEY default(random())
)
这可能吗?
integer primary key
是SQlite 中的一种关键字,它是rowid
的别名,如果您提供一个默认值,SQlite 将默默忽略您的默认值。
因此,您有两种解决方案:
创建不带
rowid
的表create table A (id integer primary key default(random())) without rowid;
将
id
声明为整数主键,而不使用"关键字"integer primary key
,例如将integer
替换为int
:create table A (id int primary key default(random()));
关于是否要采用without rowid
路线,您可以阅读文档的这一部分。
您可以使用autoincrement
:
CREATE Table A (
id INTEGER PRIMARY KEY AUTOINCREMENT
);
严格来说,这不是必需的,因为SQLite具有内置rowid
。