gpt4 book ai didi

database - 如何在 sqlite 表中查找特定主键的所有引用?

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:49 29 4
gpt4 key购买 nike

我设置了PRAGMA foreign_keys=ON;

我试图删除 sqlite3 表中的一些记录,它显示 Error: constraint failed

sqlite> delete from auth_user where id = 110;
Error: constraint failed

如果 PRAGMA foreign_keys 关闭,它会起作用。数据库有那么多表,报错这么含糊。我认为如果我们尝试删除,其他数据库系统会列出引用主键的表。

找到引用该特定主键 id=110 的所有表的有效方法是什么?

架构:

CREATE TABLE "auth_user" (
"id" integer NOT NULL PRIMARY KEY,
"username" varchar(30) NOT NULL UNIQUE,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL,
"email" varchar(75) NOT NULL,
"password" varchar(128) NOT NULL,
"is_staff" bool NOT NULL,
"is_active" bool NOT NULL,
"is_superuser" bool NOT NULL,
"last_login" datetime NOT NULL,
"date_joined" datetime NOT NULL
);

最佳答案

我不认为有一种明确的方法可以用 SQLite 列出外键约束。但是,您可以列出所有具有此类约束的表,如下所示。然后,您可以解析返回的 SQL 以查找约束。

假设您有两个父子表:

sqlite> PRAGMA foreign_keys=ON;
sqlite> create table Parent (
...> Id INTEGER PRIMARY KEY AUTOINCREMENT,
...> foo TEXT);
sqlite> create table Child (
...> Id INTEGER PRIMARY KEY AUTOINCREMENT,
...> ParentId INTEGER NOT NULL,
...> bar TEXT,
...> FOREIGN KEY (ParentId) REFERENCES Parent(Id));

您可以列出具有外键的 CREATE TABLE 语句:

sqlite> SELECT sql FROM sqlite_master WHERE sql LIKE '%REFERENCES%';
CREATE TABLE Child (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
ParentId INTEGER NOT NULL,
bar TEXT,
FOREIGN KEY (ParentId) REFERENCES Parent(Id))

您可能已经知道这一点,但是在关闭外键的情况下删除受某些外键约束的行有点破坏数据库的引用完整性,所以我只能建议您不要这样做。

关于database - 如何在 sqlite 表中查找特定主键的所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153600/

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