通常,当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
),所以也许这样轻微的改变已经阻止了别名。
答案 0 :(得分:3)
如果rowid表的主键由单个列组成,并且该列的声明类型在大写和小写的任何混合中都是“INTEGER”,那么该列将成为rowid的别名。
“NOT NULL”不是类型的一部分,但是(多余的)列约束,所以这仍然是rowid。