SQLite по-прежнему не может получить внешние ключи от

#sqlite #foreign-keys

#sqlite #foreign-keys

Вопрос:

Я использую sqlite3.exe (версия sqlite-tools-win32-x86-3270200, загруженная 28.02.2019 с https://www.sqlite.org/download.html ). Когда я .dump мою тестовую базу данных, она показывает PRAGMA foreign_keys=OFF;

Что я делаю не так в своем коде? Обратите внимание, что я также вставил PRAGMA foreign_keys = ON; после открытия базы данных, и .dump по-прежнему отображается как выключенный.

Код в:

 PRAGMA foreign_keys = ON;
.open test1.db

CREATE TABLE META_E (E_ID INTEGER PRIMARY KEY NOT NULL, E_Name TEXT, Region TEXT, Date DATE);

CREATE TABLE META_D (D_ID INTEGER PRIMARY KEY NOT NULL, Citation TEXT, is_used BOOLEAN);

CREATE TABLE META_G (Completion TEXT, D_ID INTEGER NOT NULL, Location TEXT, PRIMARY KEY (D_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));

CREATE TABLE P_ID_Main (Source_File TEXT, P_ID INTEGER NOT NULL, E_ID INTEGER NOT NULL, D_ID INTEGER NOT NULL, PRIMARY KEY (P_ID, E_ID, D_ID), FOREIGN KEY (E_ID) REFERENCES META_E (E_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));

.dump
  

Вывод дампа:

 sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE META_E (E_ID INTEGER PRIMARY KEY NOT NULL, E_Name TEXT, Region TEXT, Date DATE);
CREATE TABLE META_D (D_ID INTEGER PRIMARY KEY NOT NULL, Citation TEXT, is_used BOOLEAN);
CREATE TABLE META_G (Completion TEXT, D_ID INTEGER NOT NULL, Location TEXT, PRIMARY KEY (D_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));
CREATE TABLE P_ID_Main (Source_File TEXT, P_ID INTEGER NOT NULL, E_ID INTEGER NOT NULL, D_ID INTEGER NOT NULL, PRIMARY KEY (P_ID, E_ID, D_ID), FOREIGN KEY (E_ID) REFERENCES META_E (E_ID), FOREIGN KEY (D_ID) REFERENCES META_D (D_ID));
COMMIT;
sqlite>
  

Спасибо за любую помощь

Комментарии:

1. Это нормально, часть стандартного .dump шаблона. Таким образом, порядок таблиц и вставок не имеет значения.

2. Понял, спасибо @Shawn. Итак, единственный способ проверить сопоставление FK — это PRAGMA foreign_key_list(tablename) ?

3. Смотрите ответ Шона. Почему вы хотите иметь PRAGMA foreign_keys=ON; ? Если вам это действительно нужно, вы можете отредактировать свой файл дампа.

4. foreign_key_list ? Да? Что вы пытаетесь сделать?