插入外键约束无效的数据?[SQLite与C++]

插入外键约束无效的数据?[SQLite与C++],c++,sqlite,c++11,C++,Sqlite,C++11,我试图通过sqlite在引用原始表的临时表中创建一个外键来检查用户想要删除的记录是否存在,遗憾的是,这没有起作用,我是否遗漏了一些明显的东西 void enableForeignKeys() { const char* sql = "PRAGMA foreign_keys = ON;"; int writeToDB = sqlite3_exec(db, sql, callback, 0, &errorMessage); if (

我试图通过sqlite在引用原始表的临时表中创建一个外键来检查用户想要删除的记录是否存在,遗憾的是,这没有起作用,我是否遗漏了一些明显的东西

void enableForeignKeys()
    {
        const char* sql = "PRAGMA foreign_keys = ON;";

        int writeToDB = sqlite3_exec(db, sql, callback, 0, &errorMessage);

        if (writeToDB != SQLITE_OK) {
            cerr << "SQL error: %s" << &errorMessage << endl;
            sqlite3_free(errorMessage);
        }
        else {
            sql = "PRAGMA foreign_keys;";
            sqlite3_exec(db, sql, callback, 0, &errorMessage);
            return;
        }
    };

bool verifyEntryChoice(string referenceTable, string referencePrimaryKeyColumn, string chosenID)
    {
        sqlite3_open(filePath, &db);
        enableForeignKeys();

        string createTableQuery = "CREATE TEMP TABLE temp("
            "tempID INT UNIQUE NOT NULL,"
            "FOREIGN KEY(tempID) REFERENCES Customer(CustomerID));";

        const char* createTableSQL = &createTableQuery[0];
        cout << createTableSQL << endl;

        int writeToDB = sqlite3_exec(db, createTableSQL, callback, 0, &errorMessage);

        if (writeToDB != SQLITE_OK) {
            cerr << "Error" << endl;
            return false;
        }
        else cout << "Table created" << endl;

        string insertQuery = "INSERT INTO temp(tempID)"
            " VALUES(1);";

        const char* insertSQL = &insertQuery[0];
        cout << insertSQL << endl;

        writeToDB = sqlite3_exec(db, insertSQL, callback, 0, &errorMessage);

        if (writeToDB != SQLITE_OK) {
            cerr << "Wrong ID!" << endl;
            return false;
        }
        else {
            cout << "ID verified" << endl;
            return true;
        }
    }

我必须添加更多的话,这是张贴显然,对不起,如果这是人为错误,而不是更复杂的事情

外键不能引用另一个附加数据库中的表。因此,临时表使用的临时数据库模式中的表不能将主数据库模式中的表用作外键的父表

如果您尝试这样做:

sqlite> pragma foreign_keys=on;
sqlite> create table foo(id integer primary key, x);
sqlite> create temp table bar(id integer primary key, foo_id integer references foo(id));
sqlite> insert into foo values (1, 'dog');
sqlite> insert into bar values (1, 1);
Error: no such table: temp.foo
如您所见,它在temp模式中查找父表,但没有找到它。尝试限定表格不起作用:

sqlite> create temp table bar(id integer primary key, foo_id integer references main.foo(id));
Error: near ".": syntax error