SQLite 表的主键可以有自定义默认值吗?



我找不到任何文档说你不能在主键字段上有默认值。但是,我使用此测试代码的实验并未成功。它被接受为有效,但只生成 (n+1( 的值。它适用于非主键字段。

CREATE Table A (
id INTEGER PRIMARY KEY default(random())
)

这可能吗?

integer primary key

是SQlite 中的一种关键字,它是rowid的别名,如果您提供一个默认值,SQlite 将默默忽略您的默认值。

因此,您有两种解决方案:

  1. 创建不带rowid的表

    create table A (id integer primary key default(random())) without rowid;
    
  2. 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

最新更新