gpt4 book ai didi

database - SQLite 的 VACUUM 是否保留关键关系?

转载 作者:搜寻专家 更新时间:2023-10-30 23:13:46 26 4
gpt4 key购买 nike

PRAGMA foreign_keys已启用。

foo 没有明确的 INTEGER PRIMARY KEY

barfoo_rowid INTEGERFOREIGN KEY (foo_rowid) REFERENCES foo(rowid)

foo 中的 f 行的 rowidx 和行 b bar 中的 foo_rowidx

如果VACUUMfrowid 更改为 y,是否更改了 bfoo_rowid

The VACUUM command may change the ROWIDs of entries in any tables that do not have an explicit INTEGER PRIMARY KEY.

最佳答案

不,它不适用于非主键rowid。让我们创建没有主键的表:

$ sqlite3 test.db
SQLite version 3.7.16.2 2013-04-12 11:52:43
sqlite> create table test(name varchar(20));
sqlite> insert into test values('a'),('b'),('c');
sqlite> select rowid,* from test;
1|a
2|b
3|c

到目前为止一切顺利。让我们删除一些东西:

sqlite> delete from test where rowid=2;
sqlite> select rowid,* from test;
1|a
3|c

哇,rowid 被保留了——这很有希望!然而,VACUUM 之后会发生什么?

sqlite> vacuum full;
sqlite> select rowid,* from test;
1|a
2|c
sqlite>

糟糕,它被重新编号了!

换句话说,您必须创建真正的自动增量列才能使其正常工作,并在 VACUUM 之后保持您的 ID 不变。

关于database - SQLite 的 VACUUM 是否保留关键关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996712/

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