当前位置: 首页 > 面试题库 >

为什么不能使用SQLite ROWID作为主键?

邵兴文
2023-03-14
问题内容

这不会执行:

create table TestTable (name text, age integer, primary key (ROWID))

错误消息是:

11-23
11:05:05.298:错误/数据库(31335):准备’创建表TestTable(名称文本,年龄整数,主键(ROWID))’时,0x2ab378上的故障1(表TestTable没有名为ROWID的列)。

但是,在创建TestTable之后,这可以准备并html" target="_blank">执行:

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和ROWID表示这是不可能且不可取的,但除此之外没有提供太多解释。

因此,既然对“这可能”的答案肯定是/不可行,那么问题或多或少是“为什么不”?


问题答案:

来自SQLite.org的摘要:

在SQLite中,表行通常具有64位带符号整数ROWID,该ID在同一表的所有行中都是唯一的。(WITHOUT ROWID 表是例外。)

如果表包含INTEGER PRIMARY
KEY类型的列,则该列将成为ROWID的别名。然后,您可以访问使用以下四种不同的名称,原来的三个名字(ROWID的ROWID
_ROWID_OID)或给予INTEGER PRIMARY KEY列名。所有这些名称都是彼此的别名,并且在任何情况下都可以很好地工作。

只需将其用作主键即可。



 类似资料:
  • 问题内容: 处理一个项目,差不多完成了,只是整理了HTML,我发现您实际上没有被允许使用的ID只是一个数字, 属性“ id”具有无效值“ 567”。属性ID为ID类型。如上所述,它应该以字母开头并且不能有空格 我可以遍历我的代码并添加一个字母,然后在jQuery中使用该值时将其删除,但这会很混乱,我不需要。 是否有理由不应该将数字用作ID? 问题答案: 这就是规范所说的。 根据HTML 4规范:

  • 问题内容: 在这段代码中,当我使用 然后我的应用崩溃了,Logcat说 这是与此代码关联的XML文件 问题答案: 在这段代码中,当我使用TextView text =(TextView)getActivity()。findViewById(R.id.text1) 然后我的应用程序崩溃了,Logcat说这是由以下原因引起的:java.lang.NullPointerException:尝试在空对象引

  • 问题内容: 我正在尝试通过符合协议的编码模型来获取数据。但是它无法像下面的代码那样调用func : 但是在另一个演示中,效果很好,为什么呢? 问题答案: 解决方案1。 https://github.com/satishVekariya/SVCodable 试试这个代码,它扩展了可编码 解决方案2。 避免污染带有扩展名的Apple提供的协议 用

  • 我有一个代表文件夹的对象集合。我想让用户创建文件夹,因为他们喜欢与应用程序将创建一个“根”文件夹(对象)的约束,我想控制这个文件夹的_id属性。根据mongoDB文档,我应该能够设置_id字段,但是当我尝试时,我得到一个错误: mongo文档说_id可以是数组以外的任何BSON数据类型,因此我不理解为什么“0”无效。为什么我不能使用“0”作为\u id? 为了清楚起见,我希望mongoDB为根文件

  • 使用scandir()函数时,我收到以下php警告: Scandir无法打开目录:公共html/page2中不允许操作。php在线3 第2页。php 我想使用这个功能来打印我的根文件夹的文件和子目录,但它不工作。 有人知道怎么修吗?