0

我正在为 SQLite 使用 SQLite 和数据库浏览器。我知道,如果您想使用 GUI 插入外键,您只需向右滚动并双击即可将外键插入相应的字段。问题是当您想使用多个外键时。我应该如何或在哪里使用 GUI 放置多个外键约束?我的实际 sql 是(返回异常'外键不匹配 - 引用“蜂箱”的“疾病”......'):

CREATE TABLE "diseases" (
"id"    INTEGER NOT NULL,
"id_beehive"    INTEGER NOT NULL,
"id_apiary" INTEGER NOT NULL,
"disease"   TEXT NOT NULL,
"treatment" TEXT NOT NULL,
"start_treat_date"  DATE NOT NULL,
"end_treat_date"    DATE,
PRIMARY KEY("id"),
FOREIGN KEY("id_beehive") REFERENCES "beehives"("number") ON UPDATE CASCADE,
FOREIGN KEY("id_apiary") REFERENCES "beehives"("id_apiary") ON UPDATE CASCADE
);

我想使用 gui 做的是:

CREATE TABLE "diseases" (
"id"    INTEGER NOT NULL,
"id_beehive"    INTEGER NOT NULL,
"id_apiary" INTEGER NOT NULL,
"disease"   TEXT NOT NULL,
"treatment" TEXT NOT NULL,
"start_treat_date"  DATE NOT NULL,
"end_treat_date"    DATE,
PRIMARY KEY("id"),
FOREIGN KEY("id_beehive","id_apiary") REFERENCES "beehives"("number","id_apiary") ON UPDATE CASCADE
);

蜂箱 sql:

CREATE TABLE "beehives" (
"number"    INTEGER NOT NULL,
"id_apiary" INTEGER NOT NULL DEFAULT -2,
"date"  DATE,
"type"  TEXT,
"favorite"  BOOLEAN DEFAULT 'false',
PRIMARY KEY("number","id_apiary"),
FOREIGN KEY("id_apiary") REFERENCES "apiaries"("id") ON DELETE SET NULL
);
4

1 回答 1

0

经过研究,目前是不可能的。每次修改表的结构时,DB Browser for SQLite 在后台所做的就是重命名表,使用更新的结构创建新表,将数据移动到这个新表并删除旧表。所以在 GUI 中,它看起来像是唯一的更新。不幸的是,要创建复合外键或将简单 FK 修改为复合 FK,您只能从 SQL 窗口手动执行。

例子 :

FOREIGN KEY("id_beehive","id_apiary") REFERENCES "beehives"("number","id_apiary") ON 
UPDATE CASCADE
于 2020-06-01T11:40:06.657 回答