sqlite3のエラーの備忘録です。
結論?
FOREIGN KEY
より後にカラムを宣言できない
エラーの再現方法
test.sql
CREATE TABLE test (
id INTEGER PRIMARY KEY,
);
CREATE TABLE test2 (
test_id INTEGER,
FOREIGN KEY (test_id) REFERENCES test (id),
bbb INTEGER -- 9行目
);
test.sqlと同フォルダ内で次のコマンドを実行します
sqlite3 test.db < test.sql
すると次のエラーが出力されます
Error: near line 6: in prepare, near "bbb": syntax error (1)
エラーの解決方法
結果的に分かったエラーの原因は9行目のbbb INTEGER
文が
FOREIGN KEY (test_id) REFERENCES test (id)
よりも下にあるからと言うことです。
test2.sql
CREATE TABLE test (
id INTEGER PRIMARY KEY,
);
CREATE TABLE test2 (
bbb INTEGER,
test_id INTEGER,
FOREIGN KEY (test_id) REFERENCES test (id)
-- bbb INTEGER
);
変えたのはbbb INTEGER
の位置だけです
しかし、test2.sql
ではエラーは出力されません。
ドキュメントに目を通してはみましたが、それらしいことは書いていませんでした。
僕の環境
関係あるかはわかりませんが載せときます
$ sqlite3 -version
3.37.0 2021-12-09 01:34:53 9ff244ce0739f8ee52a3e9671adb4ee54c83c640b02e3f9d185fd2f9a179aapl
$ brew -v
Homebrew 4.0.15
Homebrew/homebrew-core (git revision 6819e9e2a22; last commit 2023-02-16)
Homebrew/homebrew-cask (git revision cc58401c09; last commit 2023-02-16)
macOS Monterey
バージョン 12.6.3
チップ Apple M1
最後に
調べてもそれらしい記事は見つけられず、エラー文もあまり親切とは言えないので、記事を書きました。
間違いを見つけた場合
エラーを再現できなかった場合
エラーが解決できなかった場合
表現がわかりにくいと感じた場合は
次に記事を見にきた方のためにも、教えて頂けると幸いです。