SQLite确实有一个限制,即无法检索外键的名称吗?我在问,因为我无法在文档中的任何地方找到这个限制。
例如,我运行以下脚本:
CREATE TABLE
users (
id INTEGER NOT NULL PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL
) ;
CREATE TABLE
orders (
id INTEGER NOT NULL PRIMARY KEY,
user_id INTEGER NOT NULL,
CONSTRAINT fk_users FOREIGN KEY (user_id) REFERENCES users(id)
) ;
现在我想查看关键字" fk_users"确实创建了,所以我运行以下PRAGMA:
PRAGMA foreign_key_list(orders);
我希望在第一列中看到我的外键的名称,但我看到一些" 0"价值而不是。此外,如果我使用自定义名称创建多个外键,它们都被称为" 0"或" 1"。
这确实是SQLite的限制,还是我错过了什么?
答案 0 :(得分:1)
没有提取约束名称的机制。
答案 1 :(得分:1)
表sqlite_master在“sql”列中存储CREATE命令。您可以查询该命令并进行一些解析以提取外键的名称。一个适用于我的组合外键的示例:
SELECT sql FROM sqlite_master WHERE name = 'song'
产量
CREATE TABLE "song" (
"songid" INTEGER,
"songartist" TEXT,
"songalbum" TEXT,
"songname" TEXT,
CONSTRAINT "fk__song_album" FOREIGN KEY ("songartist", "songalbum") REFERENCES "album" ("albumartist", "albumname")
)
并包含外键的名称“fk__song_album”。
如果用查询改变外键,则修改/更新sql列的内容:
sqlite_master.sql列中的文本是创建该对象的原始CREATE语句文本的副本,除了如上所述标准化并由后续ALTER TABLE语句修改之外。对于由UNIQUE或PRIMARY KEY约束自动创建的内部索引,sqlite_master.sql为NULL。
https://www.sqlite.org/fileformat2.html
额外提示: 要在Navicat(Lite)中查看外键信息,请右键单击表并选择“设计表”。然后选择外键选项卡。