#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
? Да? Что вы пытаетесь сделать?