SQLiteを使うときの注意点まとめ

Laravelデータベース

最近LaravelでSQLiteを使って気づいたことをまとめておきます。

Laravelでは、SQLiteはデフォルトで利用できて便利ながら、MySQLと挙動が異なることがありました。そこで注意点をまとめました。

なおSQLite管理ツールとして、DB Browser for SQLを使っています。本記事でもこちらのスクショを使用します。

after句は無効になる

カラムの位置を指定できるafter句は、SQLiteでは無効になってしまいました。

test7カラムを追加する際、次のように、マイグレーションファイル内でtestカラムのあとにtest7カラムが配置されるよう、afterを使って指定しました。


マイグレーション実行後がこちら。afterがきかず、テーブル内の一番最後に配置されました。

foreignId や unsignedBigInteger は INTEGER 扱い

リレーションを設定したときなどは、マイグレーションファイルでデータ型としてforeignId や unsignedBigIntegerを指定します。

ですが、foreignId や unsignedBigIntegerはSQLite上ではINTEGER として扱われます。SQLiteでは符号なし整数という概念がなく、実際に負の値も入ってしまう こともあります。

ただ、外部キー制約を加えたい場合には、以下のようにconstrainedを追加できます。

$table->foreignId(‘カラム名’)->constrained(‘参照先のテーブル名’);

おまけ:constrainedが有効になっているかどうか簡単チェック方法

Laravelでは、config/databaseの下記により、.envに設定がない限り、デフォルトでforeign_key_constraintsがtrue(使える)状態になっています。

【config/databae】

そのため、該当カラムのconstrained が有効になっているかどうかは、tinkerを使って、下記コマンドで簡単にチェックできます。

① php artisan tinker コマンドでtinkerを起動

② 下記で該当テーブルの中の外部キー制約機能がONになっているかどうかをチェック

testsテーブルのtest8カラムでconstrainedが有効になっていることを示しています

LONGTEXT は SQLite の TEXT と同じ

MySQLのようなTEXTMEDIUMTEXTLONGTEXTといった細分化はなく、SQLiteでは「TEXT」として一括りに扱われます。

なお、SQLiteは、MySQLとデータ型の概念が異なり、ストレージや型親和性(Type Affinity)の仕組みに沿って処理を行います。公式ドキュメントによれば、SQLite で取りうるストレージクラスは NULL, INTEGER, TEXT, BLOB, REAL の 5 種類だけです。

database is lockedエラーに注意

SQLiteは単一ファイルを直接操作する形式のデータベースです。そのため、下記の場合に「database is locked」 エラーが起きやすくなります。

  • 頻繁に書き込みを行ったりマイグレートを実行
  • 長時間トランザクションが開いている
  • データベース管理ツールが同じファイルを実行している

(エラー時の画面)

エラーが起こったら、データベース管理ツールやプロジェクトを再起動してみてください。

さいごに

プロジェクトによりますし、小規模なら問題ないかもしれませんが、本番環境ではMySQLなどを使うほうが無難だと感じます。

とはいえ、SQLiteはLaravelでデフォルトで使えますし、軽量で動かしやすく開発環境では便利。

本記事では実際に使う時に注意したほうが良さそうなポイントをまとめましたが、お役にたてば幸いです。

Laravelデータベース Laravel・PHP豆知識・トラブル対策

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【AWS関連・Webアプリ開発・生成AIのAPI活用のご相談承ってます】
お気軽にお声がけください。
御社にとって、最善の方法をご一緒に考えてまいります。
Zoomミーティング実施中。サンプルアプリご利用可能です。

お問合せフォーム

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

最新版Laravel11用のサポートガイドご用意しています。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました