gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:19:21 26 4
gpt4 key购买 nike

这不执行:

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

错误信息是:

11-23 11:05:05.298: ERROR/Database(31335): Failure 1 (table TestTable has no column named ROWID) on 0x2ab378 when preparing 'create table TestTable (name text, age integer, primary key (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 的总结:

In SQLite, table rows normally have a 64-bit signed integer ROWID which is unique among all rows in the same table. (WITHOUT ROWID tables are the exception.)

If a table contains a column of type INTEGER PRIMARY KEY, then that column becomes an alias for the ROWID. You can then access the ROWID using any of four different names, the original three names (ROWID, _ROWID_, or OID) or the name given to the INTEGER PRIMARY KEY column. All these names are aliases for one another and work equally well in any context.

将其作为主键即可。

关于sql - 为什么不能使用 SQLite ROWID 作为主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8246649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com