0

我在将外键列添加到 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 中制作?

4

1 回答 1

0

更改表以添加带有 的列时NOT NULL,您需要添加一个DEFAULT值。否则,在添加列时它不知道在现有记录中放入什么(因为 NULL 无效)。

文档参考: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);
于 2019-06-26T01:53:17.580 回答