sty*_*972 12 sql sqlite primary-key
这不会执行:
create table TestTable (name text, age integer, primary key (ROWID))
Run Code Online (Sandbox Code Playgroud)
错误消息是:
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;
Run Code Online (Sandbox Code Playgroud)
我可能会认为ROWID
这是一个需要自动增量主键和外键的解决方案,它们永远不会被用作应用层上的数据.由于默认情况下ROWID
隐藏了select
结果集,因此将它与主键相关联同时使其与应用程序逻辑隐藏在一起会很不错. OracleBlog:ROWNUM和ROWID说这是不可能的,也是不可取的,但除此之外没有提供太多解释.
所以,既然'这可能'的答案绝对不是/不可取的,那么问题或多或少是'为什么不'?
Eug*_*ene 34
来自SQLite.org:
如果表包含INTEGER PRIMARY KEY类型的列,则该列将成为ROWID的别名.然后,您可以使用四个不同的名称中的任何一个来访问ROWID,上面描述的原始三个名称或给予INTEGER PRIMARY KEY列的名称.所有这些名称都是彼此的别名,并且在任何情况下都能同样有效.
只需将其用作主键即可.