“NOT NULL”是否会阻止rowid别名?

时间:2014-02-15 12:52:19

标签: sqlite rowid

通常,当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),所以也许这样轻微的改变已经阻止了别名。

1 个答案:

答案 0 :(得分:3)

根据documentation

  

如果rowid表的主键由单个列组成,并且该列的声明类型在大写和小写的任何混合中都是“INTEGER”,那么该列将成为rowid的别名。

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