Ответ 1
Взято с этого сайта, http://www.sqlite.org/foreignkeys.html.
Предполагая, что библиотека скомпилирована с включенными ограничениями внешнего ключа, она должна быть включена приложением во время выполнения, используя команду PRAGMA foreign_keys. Например:
sqlite> PRAGMA foreign_keys = ON;
Ограничения по внешним ключам по умолчанию отключены (для обратной совместимости), поэтому их необходимо активировать отдельно для каждого подключения к базе данных отдельно. (Обратите внимание, однако, что будущие выпуски SQLite могут измениться, чтобы по умолчанию были ограничены внешние ключи. Тщательные разработчики не будут делать никаких предположений о том, включены ли внешние ключи по умолчанию, но вместо этого будут включать или отключать их по мере необходимости.) приложение может также использовать инструкцию PRAGMA foreign_keys, чтобы определить, включены ли внешние ключи. Следующий сеанс командной строки демонстрирует это:
sqlite> PRAGMA foreign_keys;
0
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1
sqlite> PRAGMA foreign_keys = OFF;
sqlite> PRAGMA foreign_keys;
0
Совет. Если команда "PRAGMA foreign_keys" не возвращает данные вместо одной строки, содержащей "0" или "1", то используемая вами версия SQLite не поддерживает внешние ключи (либо потому, что она старше 3.6.19 или потому, что он был скомпилирован с использованием SQLITE_OMIT_FOREIGN_KEY или SQLITE_OMIT_TRIGGER).
Невозможно включить или отключить ограничения внешнего ключа в середине транзакции с несколькими операторами (когда SQLite не находится в режиме автосохранения). Попытка сделать это не возвращает ошибку; он просто не имеет эффекта.