SQLite documentation 中它说:



但这是否适用于 rowid 的别名?例如在 SQLite 中,如果您有一个 INTEGER PRIMARY KEY 列,那么该列本质上是 rowid 的别名:



(省略异常(exception);此处不相关)

这里有一个类似的问题:
sql - Why does referencing a SQLite rowid cause foreign key mismatch? - Stack Overflow

如果我采用该示例并将其修改为使用别名(我的整数主键列),它似乎可以工作:

sqlite> CREATE TABLE foo(a INTEGER PRIMARY KEY, name);
sqlite> create table bar(foo_rowid REFERENCES foo(a));
sqlite> INSERT INTO foo VALUES( NULL, "baz" );
sqlite> select * from foo;
a           name
----------  ----------
1           baz
sqlite> INSERT INTO bar (foo_rowid) VALUES(1);
sqlite> select * from bar;
foo_rowid
----------
1
sqlite>

但是引用rowid的别名是否合法?谢谢。

最佳答案

如果内部 rowid 不是命名列,它可能不会在 VACUUM 之后保留相同的值,这会破坏外键引用。

如果 rowid 已命名,则保证保留其值。
使用 INTEGER PRIMARY KEY 作为外键的父键是允许的,并且是常见的。

关于SQLite - 引用 rowid 别名的外键。合法不合法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24002548/

10-15 18:12