Как прописывать FOREIGN KEY значение в INSERT INTO?

Допустим есть:

CREATE TABLE user (
    user_id INTEGER,
    username TEXT,
    PRIMARY KEY (user_id)
)
CREATE TABLE info (
    info_id INTEGER,
    information TEXT,
    FOREIGN KEY (info_id) REFERENCES user(user_id)  
)

И как прописать INSERT INTO для info? Ведь если просто прописать

INSERT INTO info
VALUES (1, 'info if not defined')

То даже учитывая, что в таблице user нету пользователя с user_id 1 строка всё равно создастся и взаимосвязи нету.


Ответы (1 шт):

Автор решения: Anton Shchyrov

Для обеспечения обратной совместимости, по умолчанию, поддержка внешних ключей в SQLite отключена.

Если SQLite откомпилирована без опций SQLITE_OMIT_FOREIGN_KEY и SQLITE_OMIT_TRIGGER то поддержка внешних ключей включается командой

PRAGMA foreign_keys = ON;

команда

PRAGMA foreign_keys;

покажет текущее состояние переменной.

Если при компиляции был определен параметр SQLITE_OMIT_TRIGGER то внешние ключи игнорируются вне зависимости от PRAGMA foreign_keys.

Если при компиляции был определен параметр SQLITE_OMIT_FOREIGN_KEY то конструкция FOREIGN KEY (info_id) REFERENCES user(user_id) будет вызывать ошибку парсинга.

Первоисточник

→ Ссылка