1

通常,当 Sqlite 遇到integer primary key语句时,例如

CREATE TABLE [T] (id INTEGER PRIMARY KEY, [...]);

那么该id列将是rowid列的别名,也就是 Sqlite 的内部 ID 列。

但是,当附加not null

CREATE TABLE [T] (Id INTEGER PRIMARY KEY NOT NULL, [...]);

别名仍然激活吗?

NOT NULL应该不会影响表的语义属性,但是别名规则非常严格(例如,它不会接受int而不是integer),所以也许这个微小的变化已经防止了别名。

4

1 回答 1

3

根据文件

如果 rowid 表的主键由单个列组成,并且该列的声明类型为“INTEGER”(大小写任意混合),则该列将成为 rowid 的别名。

“NOT NULL”不是类型的一部分,而是(多余的)列约束,所以这仍然是 rowid。

于 2014-02-15T15:46:33.847 回答