这不会执行:
create table TestTable (name text, age integer, primary key (ROWID))
错误消息是:
11-23 11:05:05.298:ERROR / Database(31335):在准备'create table TestTable(name text,age integer,primary key(ROWID))'时,0x2ab378上的失败1(表TestTable没有名为ROWID的列)。
但是,在创建TestTable之后,这准备并执行得很好:
create table TestTable (name text, age integer);
insert into TestTable (name, age) values ('Styler', 27);
select * from TestTable where ROWID=1;
我可能会将ROWID
视为需要自动增量主键和外键的解决方案,这些主键永远不会被用作应用层上的数据。由于ROWID
默认是从select
结果集中隐藏的,因此将它与主键相关联同时将其与应用程序逻辑隐藏起来会很不错。 OracleBlog: ROWNUM and ROWID说这是不可能的,也是不可取的,但除此之外没有提供太多解释。
所以,既然'这可能'的答案绝对不是/不可取的,那么问题或多或少是'为什么不'?
SQLite.org摘要:
在SQLite中,表行通常具有64位有符号整数ROWID,它在同一个表中的所有行中是唯一的。 (
WITHOUT ROWID
表是例外。)如果表包含INTEGER PRIMARY KEY类型的列,则该列将成为ROWID的别名。然后,您可以使用四个不同的名称中的任何一个来访问ROWID,原始的三个名称(
ROWID
,_ROWID_
或OID
)或给予INTEGER PRIMARY KEY列的名称。所有这些名称都是彼此的别名,并且在任何情况下都能同样有效。
只需将其用作主键即可。