SQLite表的主键是否具有自定义默认值?

时间:2017-07-31 02:16:32

标签: sql sqlite

我找不到任何说明你在PRIMARY KEY字段上没有DEFAULT值的文档。但是我对这个测试代码的实验并没有成功。它被认为是有效的,但只生成(n + 1)的值。它适用于非主键字段。

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

这可能吗?

2 个答案:

答案 0 :(得分:2)

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()));
    
  3. 关于您是否要采用without rowid路线,您可以阅读文档的this section

答案 1 :(得分:0)

您可以使用autoincrement

CREATE Table A (
    id INTEGER PRIMARY KEY AUTOINCREMENT
);

严格来说,这不是必需的,因为SQLite有一个内置的rowid