Qite中未级联的SQLite“在删除CASCADE上”

You*_*sef 5 c++ sqlite qt

我在Qt中有一个数据库。它有四个表:主组,子组,零件和位置。这是我的数据库:

CREATE TABLE `maingroup` (
    `groupName`TEXT NOT NULL UNIQUE,
     PRIMARY KEY(`groupName`)
);
CREATE TABLE `subgroup` (
    `sub`   TEXT NOT NULL UNIQUE,
    `main`  TEXT NOT NULL,
    PRIMARY KEY(`sub`),
    FOREIGN KEY(`main`) REFERENCES `maingroup`(`groupName`) ON DELETE CASCADE
);
CREATE TABLE `parts` (
    `ID`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    `Part_Number`   TEXT,
    `Type`  TEXT NOT NULL,
    `Value` TEXT,
    `Voltage`   TEXT,
    `Quantity`  TEXT,
    `Position`  TEXT,
    `Picture`   TEXT,
    FOREIGN KEY(`Position`) REFERENCES `Position`(`Poistion`) ON DELETE CASCADE,
    FOREIGN KEY(`Type`) REFERENCES `subgroup`(`sub`) ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

表部分中的类型是外键,指的是表子组中的列子。表子组中的main是外键,指的是表主组中的列组名。我的问题是,当我delete from maingroup WHERE groupName= 'dd';在数据库浏览器中尝试()时,它同时删除了父级和子级。但是在QT中,此命令(myQuery.exec("delete from maingroup WHERE groupName= 'dd'");)仅删除主组表中的父字段,而不删除子组和零件表中的子字段,并且子组表中的主列引用主组表中不存在的字段。这怎么了?我该怎么办?

Tre*_*edJ 6

您需要通过在 DELETE 语句之前执行另一条语句来打开外键编译指示。

QSqlQuery q;
q.exec("PRAGMA foreign_keys = ON");
q.exec("DELETE FROM ...");
Run Code Online (Sandbox Code Playgroud)

这能够级联删除,也应该足以解决其他与外键相关的问题。

积分到该forum.qt.io岗位。