Как добавить внешний ключ NOT NULL в таблицу SQlite3 в файле node.js - PullRequest
0 голосов
/ 26 июня 2019

У меня возникли проблемы с добавлением столбца внешнего ключа в уже существующую таблицу на SQLite.

Вот мой код SQL:

CREATE TABLE IF NOT EXISTS director (
    director_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS movie (
    movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

ALTER TABLE movie ADD COLUMN director_id INTEGER NOT NULL REFERENCES
director(director_id);

Это дает мне следующую ошибку:

Uncaught Error: Cannot add a NOT NULL column with default value NULL

Однако, если я уберу ограничение «NOT NULL», оно будет работать нормально:

ALTER TABLE movie ADD COLUMN director_id INTEGER REFERENCES
director(director_id);

Следующее также отлично работает, но у меня уже есть существующая таблица:

CREATE TABLE IF NOT EXISTS director (
    director_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS movie (
    movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    director_id INTEGER NOT NULL,
    FOREIGN KEY(director_id) REFERENCES director(director_id)
);

Я что-то упустил или это нельзя сделать в SQLite?

1 Ответ

0 голосов
/ 26 июня 2019

При изменении таблицы для добавления столбца с NOT NULL необходимо добавить значение DEFAULT.В противном случае он не знает, что добавить в существующую запись при добавлении столбца (поскольку NULL недействителен).

Документы ref: https://sqlite.org/lang_altertable.html

Например:

CREATE TABLE IF NOT EXISTS movie (
    movie_id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);
ALTER TABLE movie ADD COLUMN director_id INTEGER NOT NULL DEFAULT 0 REFERENCES director(director_id);
...