SQLite

SQLite
開発者D.リチャード・ヒップ
初回リリース2000年8月17日 (2000年8月17日
安定版リリース3.51.2 [ 1 ] ウィキデータで編集する(2026年1月9日) (2026年1月9日
リポジトリ
書かれたC
オペレーティング·システムクロスプラットフォーム
サイズ699 キロバイト
タイプRDBMS組み込み
ライセンスパブリックドメイン[ 2 ]
Webサイトsqlite .orgWikidataで編集する
SQLite データベースファイル形式
ファイル名拡張子
.sqlite、.sqlite3、.db、.db3、.s3db、.sl3
インターネットメディアの種類application/vnd.sqlite3[ 3 ]
魔法の数字53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00(ゼロ終端ASCII「SQLiteフォーマット3」)
初回リリース2004年6月18日
オープンフォーマット?はい(パブリックドメイン
Webサイトsqlite .org /ファイルフォーマット.html

SQLite/ ˌ ɛ s ˌ k juː ˌ ɛ l ˈ t / "SQL-ite"、[ 4 ] [ 5 ] / ˈ s k w ə ˌ l t / "sequel-ite" [ 6 ])は、Cプログラミング言語で書かれた無料のオープンソースリレーショナルデータベースエンジンです。これはスタンドアロンアプリケーションではなく、ソフトウェア開発者がアプリケーションに埋め込むライブラリです。そのため、組み込みデータベースのファミリーに属しています。開発者によると、SQLiteは最も広く導入されているデータベースエンジンであり、いくつかの主要なWebブラウザーオペレーティングシステム携帯電話、その他の組み込みシステムで使用されています。[ 7 ]

多くのプログラミング言語はSQLiteライブラリへのバインディングを持っています。SQLiteは一般的にPostgreSQLの構文に従いますが、デフォルトでは型チェックを強制しません。 [ 8 ] [ 9 ]つまり、例えば整数として定義された列に文字列を挿入することが可能です。SQLiteは軽量な組み込みデータベースですが、トランザクションACID保証を含むSQL標準とリレーショナルモデルのほとんどを実装しています。 [ 10 ]しかし、マテリアライズドビューやトリガーおよびALTER TABLE文の完全なサポートなど、他のデータベースで実装されている多くの機能は省略されています。[ 11 ]

歴史

D・リチャード・ヒップは、 2000年春、ジェネラルダイナミクス社でアメリカ海軍との契約に基づき勤務していた際にSQLiteを設計しました。[ 12 ]ヒップは、ミサイル駆逐艦のダメージコントロールシステムに使用されるソフトウェアを設計していました。このダメージコントロールシステムは、当初HP-UXInformixデータベースをバックエンドとして利用していました。SQLiteはTcl拡張機能として始まりました。[ 13 ]

2000年8月、SQLiteのバージョン1.0がリリースされました。ストレージはgdbm(GNU Database Manager)をベースにしていました。2001年9月、SQLite 2.0はgdbmをカスタムBツリー実装に置き換え、[ a ]トランザクション機能を追加しました。2004年6月、SQLite 3.0は国際化マニフェスト型付け、およびその他の主要な改善を加えました。これはAmerica Onlineの資金援助によるものでした。2011年、ヒップはSQLiteにNoSQLインターフェースを追加する計画を発表し、ドキュメント指向データベース向けに設計されたSQLの機能的スーパーセットであるUnQLも発表しました。[ 15 ]

SQLiteは、議会図書館が使用を承認したデータセットの長期保存に推奨される4つの形式の1つです。[ 16 ] [ 17 ] [ 18 ]

デザイン

SQLiteは、データベース管理システムをインストールしたり、データベース管理者を必要とせずにプログラムを操作できるように設計されています。クライアントサーバー型データベース管理システムとは異なり、SQLiteエンジンには、アプリケーションプログラムが通信するスタンドアロンプ​​ロセスがありません。代わりに、リンカーがSQLiteライブラリを静的または動的にアプリケーションプログラムに統合します。アプリケーションプログラムは、単純な関数呼び出しを通じてSQLiteの機能を使用し、データベース操作のレイテンシを削減します。同時実行性が低い単純なクエリの場合、SQLiteのパフォーマンスはプロセス間通信のオーバーヘッドを回避することで向上します。

サーバーレス設計のため、SQLiteアプリケーションはクライアントサーバーデータベースよりも設定が少なくて済みます。SQLiteは、サービス管理、起動スクリプト、パスワードまたはGRANTベースのアクセス制御などの設定タスクが不要であるため、ゼロ設定[ 19 ]と呼ばれています。アクセス制御は、データベースファイルのファイルシステム権限によって処理されます。 [ 20 ]クライアントサーバーシステムのデータベースは、デーモンプロセスのみがデータベースファイルにアクセスできるようにするファイルシステム権限を使用します。デーモンプロセスは内部でロックを処理し、複数のプロセスからの同時書き込みを許可します。

SQLite は、定義、テーブル、インデックス、データで構成されるデータベース全体を単一のクロスプラットフォームファイルとして保存し、複数のプロセスまたはスレッドが同じデータベースに同時にアクセスできるようにします。書き込み中にデータベース ファイルをロックすることで、このシンプルな設計を実装しています。 [ 20 ]書き込みアクセスはエラー コードで失敗するか、設定可能なタイムアウトが経過するまで再試行できます。SQLite の読み取り操作はマルチタスク化できますが、サーバーレス設計のため、書き込みは順番にしか実行できません。この同時アクセス制限は一時テーブルには適用されず、バージョン 3.7 では先行書き込みログ(WAL) によって同時読み取りと書き込みが可能になったため、この制限は緩和されています。 [ 21 ] SQLite はファイル システム ロックに依存する必要があるため、書き込み集中型の展開には適していません。[ 22 ]

SQLiteはPostgreSQLをリファレンスプラットフォームとして採用しています。「PostgreSQLならどうするだろうか」という問いは、SQL標準を理解するために用いられます。[ 23 ] [ 24 ]大きな違いの一つは、主キーを除いてSQLiteは型チェックを強制しないことです。値の型は動的であり、スキーマによって厳密に制約されることはありません(ただし、スキーマは保存時に、そのような変換が潜在的に可逆である場合、変換をトリガーします)。SQLiteはポステルの規則に従うよう努めています。[ 25 ]

特徴

SQLiteはSQLのSQL-92標準の大部分を実装していますが、いくつかの機能が欠けています。例えば、トリガーは部分的にしか提供されておらず、ビューへの書き込みもできません(ただし、この機能を提供するINSTEAD OFトリガーは提供しています)。ALTER TABLE文のサポートも限定的です。[ 26 ]

SQLite は、SQL 互換の DBMS としては珍しい型システムを採用しています。ほとんどの SQL データベース システムのように列に型を割り当てるのではなく、個々の値に型が割り当てられます。言語的には、動的に型付けされます。さらに、Perlと同じように弱い型付けになっています。つまり、文字列を整数列に挿入できます(ただし、列の優先型が整数の場合、SQLite は最初に文字列を整数に変換しようとします)。これにより、特に動的に型付けされたスクリプト言語にバインドされている場合、列の柔軟性が向上します。ただし、この手法は他の SQL 製品には移植できません。よくある批判として、SQLite の型システムには、静的に型付けされた列によって提供されるデータ整合性メカニズムが欠けているというものがあります。ただし、のような制約でエミュレートすることはできます。[ 12 ] 2021 年には、列のデータ型制約を強制する STRICT テーブルを通じて静的型付けのサポートが追加されました。[ 27 ]CHECK(typeof(x)='integer')

テーブルには通常、非表示のROWIDインデックス列が含まれており、これによりアクセスが高速化されます。[ 28 ]テーブルにINTEGER PRIMARY KEY列が含まれている場合、SQLiteは通常、それをROWIDの別名として扱うことで最適化し内容を厳密に型指定された64ビット符号付き整数として保存し、その動作を自動インクリメント列のような形に変更します。SQLiteにはROWID列のないテーブルを作成するオプションがあり、これによりディスク容量を節約し、検索速度を向上させることができます。ROWIDのないテーブルには主キーが必要です。[ 29 ]

SQLiteは外部キー制約をサポートしていますが[ 30 ] [ 31 ]、デフォルトでは無効になっており、PRAGMA文を使用して手動で有効にする必要があります。[ 32 ]

ストアドプロシージャはサポートされていません。これは開発者がシンプルさを優先した明確な選択であり、SQLiteの典型的な使用例は、データベースの周囲に独自のプロシージャを定義できるホストアプリケーション内に埋め込まれることです。[ 33 ]

SQLiteは、後方互換性のため、またUnicodeテーブルのサイズがSQLiteライブラリよりも大きいため、デフォルトでは完全なUnicodeをサポートしていません。 [ 34 ] Unicodeの大文字と小文字の変換の完全なサポートは、オプションの拡張機能によって有効にすることができます。[ 35 ]

SQLiteはFTS5ロード可能な拡張機能を通じて全文検索をサポートしており、検索エンジンがウェブページを検索するのと同様に、ユーザーは大量の文書内でキーワードを効率的に検索することができます。[ 36 ]

SQLiteは、 json1拡張機能を通じてJSONを扱うためのサポートを含んでおり、2021年からデフォルトで有効化されています。SQLiteのJSON関数は、2023年からJSON5構文を処理できます。2024年には、SQLiteはJSONの内部表現をバイナリシリアル化するJSONBのサポートを追加しました。JSONBを使用すると、アプリケーションはJSONテキストを処理するたびに解析する必要がなくなり、ディスク容量を少し節約できます。[ 37 ]

2025年5月、25周年記念リリースのSQLite 3.50.0では、新しいUnicode関数(unistr()およびunistr_quote())、ロックタイムアウトを設定するための新しいAPI(sqlite3_setlk_timeout())、改良されたコマンドラインツールとrsyncユーティリティの機能強化、最適化されたJSONBなどの追加機能が導入されました。[ 38 ]

SQLiteデータベースファイルの最大サポートサイズは281テラバイトです。[ 39 ]

開発と流通

SQLiteのコードはFossilでホストされています。Fossilは、非リレーショナルデータベース形式のSQLiteをローカルキャッシュとして使用し、SQLiteのSQLを実装言語として使用する分散バージョン管理システムです。 [ 40 ] [ 41 ]

SQLiteはパブリックドメインですが、「オープンな貢献」ではありません。ウェブサイトには「このプロジェクトは、貢献をパブリックドメインに捧げる宣誓供述書を提出していない人からのパッチは受け付けません」と記載されています。 [ 42 ]創設者たちは、行動規範の代わりに、聖ベネディクトの戒律に基づく倫理規定を採用しました。[ 43 ]

SQLiteの配布物には、 sqlite3 [ 44 ]と呼ばれるスタンドアロンのコマンドラインシェルプログラムが付属しています。このプログラムを使用して、データベースの作成、テーブルの定義、行の挿入と変更、クエリの実行、SQLiteデータベースファイルの管理を行うことができます。また、SQLiteライブラリを使用するアプリケーションを作成するためのサンプルとしても役立ちます。

SQLiteは、各リリースの前に自動回帰テストを実施します。リリース検証の一環として、200万以上のテストが実行されます。SQLiteライブラリのソースコードは156,000行あり、すべてのテストスイートを合わせるとテストコードは9,200万行になります。SQLiteのテストでは、ライブラリの機能性をテストするだけでなく、電源喪失やI/Oエラーなどの様々な例外的なシナリオをシミュレートします。2009年8月10日のSQLite 3.6.17リリース以降、SQLiteリリースはコードカバレッジの構成要素の一つであるブランチテストカバレッジが100%となっています。SQLiteには、オリジナルのパブリックドメインTCLテスト、独自のC言語TH3テストスイート、SQLiteを他のSQLデータベースと比較するSQLロジックテスト、そして独自のファジングエンジンdbsqlfuzzの4つの異なるテストハーネスがあります。[ 45 ]

注目すべき用途

オペレーティングシステム

SQLite はデフォルトで次のものに含まれています:

ミドルウェア

ウェブブラウザ

Webアプリケーションフレームワーク

その他

参照

注記

  1. ^ SQLiteのBツリー実装はもともと『The Art of Computer Programming』から改作されたものである。 [ 14 ]

参考文献

引用

  1. ^ 「SQLite Release 3.51.2 On 2026-01-09」。2026年1月9日。 2026年1月9日閲覧
  2. ^ "SQLite Copyright" . sqlite.org . 2010年5月17日閲覧
  3. ^ 「IANAにおけるSQLiteデータベースファイル形式のメディアタイプ」 . Internet Assigned Numbers Authority . IANA . 2019年3月8日閲覧
  4. ^ 「SQLiteがデータベースとして成功した理由 ― SQLiteの開発者、リチャード・ヒップ」。The Changelog。エピソード201。イベント発生時刻:00:16:00。2022年7月7日アーカイブ。 2025年4月11日閲覧製品名はどう発音しますか?鉱物のように「SQL-ite」と発音します。
  5. ^ D. Richard Hipp(プレゼンター)(2006年5月31日)SQLite入門(ビデオ) Google Inc. イベント発生時刻:00:01:14 2010年3月23日閲覧[ˌɛsˌkjuˌwəlˈaɪt̚]
  6. ^ D. Richard Hipp(プレゼンター)(2006年5月31日). SQLite入門. Google Inc. イベント発生時刻:00:48:15 . 2010年3月23日閲覧. [ˈsikwəˌlaɪt̚]
  7. ^ 「最も広く導入されているSQLデータベースの推定」 SQLite.org 2011年5月11日閲覧
  8. ^ Owens, Michael (2006). 「第4章 SQL」 . Gilmore, Jason, Thomas, Keir (編). 『SQLite 決定版ガイド』 . D. Richard Hipp (序文), Preston Hagar (技術評論家). Apress . p. 133. ISBN 978-1-59059-673-9. 2020年11月24日時点のオリジナルよりアーカイブ。2014年12月30日閲覧。
  9. ^ 「STRICTテーブル」2022年8月7日時点のオリジナルよりアーカイブ2022年8月11日閲覧。
  10. ^ 「Full-Featured SQL」 . SQLite . 2025年1月24日閲覧
  11. ^ 「SQLiteが実装していないSQL機能」 . SQLite . 2025年1月24日閲覧
  12. ^ a b Owens, Michael (2006). 「SQLite入門」. SQLite決定版ガイド. Apress . pp.  1– 16. doi : 10.1007/978-1-4302-0172-4_1 . ISBN 978-1-59059-673-9
  13. ^ a b c d e f g h i j k「SQLiteの著名なユーザー」。SQLite。2015年7月11日時点のオリジナルよりアーカイブ。 2015年8月5日閲覧
  14. ^ Bell, Adam. 「SQLiteの知られざる物語」Corecursive . 2025年11月16日閲覧
  15. ^ 「インタビュー:ドキュメントデータベース向けの新しいクエリ言語、UnQLについて語るリチャード・ヒップ氏」 InfoQ、2011年8月4日。2014年4月8日時点のオリジナルよりアーカイブ。 2011年10月5日閲覧
  16. ^ 「LoC推奨ストレージフォーマット」 . sqlite.org . 2020年4月23日時点のオリジナルよりアーカイブ2020年4月9日閲覧。
  17. ^ 「SQLite バージョン 3」www.loc.gov 2017年3月28日. 2020年5月11日時点のオリジナルよりアーカイブ2020年4月9日閲覧。
  18. ^ 「推奨フォーマットに関する声明 – データセット/データベース」。米国議会図書館。2018年8月22日時点のオリジナルよりアーカイブ。 2020年4月9日閲覧
  19. ^ 「SQLiteはゼロ設定データベースです」 SQLite.org。2024年5月2日時点のオリジナルよりアーカイブ2015年8月3日閲覧。
  20. ^ a b「SQLite」 . ClickHouse Docs . 2025年1月25日閲覧
  21. ^ 「SQLite 3.7 の先行書き込みログ」。SQLite.org。2024年5月2日時点のオリジナルよりアーカイブ2011年9月3日閲覧。WALは、読み取り側が書き込み側をブロックせず、書き込み側が読み取り側をブロックしないため、より高い同時実行性を実現します。読み取りと書き込みは同時に実行できます。
  22. ^ 「SQLiteの適切な使用法」 SQLite.org。2024年5月2日時点のオリジナルよりアーカイブ2015年9月3日閲覧。
  23. ^ Berkus, Josh (2014年6月4日). 「PGCon 2014: Clustering and VODKA」 . Lwn.net . 2015年6月29日時点のオリジナルよりアーカイブ2017年1月6日閲覧。
  24. ^ "PGCon2014: SQLite: Protégé of PostgreSQL" . Pgcon.org . 2015年9月20日. 2014年12月30日時点のオリジナルよりアーカイブ。 2017年1月6日閲覧
  25. ^ "SQLite: StrictMode" . Sqlite.org . 2016年3月4日時点のオリジナルよりアーカイブ2015年9月3日閲覧。
  26. ^ 「SQLiteのリリース履歴」2021年3月16日時点のオリジナルよりアーカイブ2021年3月22日閲覧。
  27. ^ 「STRICTテーブル」 . SQLite . 2025年1月24日閲覧
  28. ^ 「SQLiteによるSQLの理解」。SQLite。 2018年521日時点のオリジナルからアーカイブ2018年5月21日閲覧。特定のROWIDを持つレコード、または指定された範囲内のROWIDを持つすべてのレコードの検索は、他のPRIMARY KEYまたはインデックス値を指定して行う同様の検索よりも約2倍高速です。
  29. ^ 「クラスター化インデックスとWITHOUT ROWID最適化」 . SQLite . 2025年1月24日閲覧
  30. ^ビル・カーウィン(2010年5月). ジャックリン・カーター(編). SQLアンチパターン:データベースプログラミングの落とし穴を避ける. The Pragmatic Bookshelf. p. 70. ISBN 978-1-934356-55-5場合によっては、外部キー制約をサポートしていないデータベース ブランド (MySQL の MyISAM ストレージ エンジンやバージョン 3.6.19 より前の SQLite など) を強制的に使用しなければならないことがあります
  31. ^ 「SQLite Release 3.6.19 On 2009-10-14」 . sqlite.org . 2020年10月29日時点のオリジナルよりアーカイブ2020年10月15日閲覧。
  32. ^ 「SQLite外部キーサポート」 . SQLite . 2025年1月24日閲覧
  33. ^出典: SQLiteフォーラムの開発者のコ​​メント(2023年4月1日Wayback Machineアーカイブ)
  34. ^ 「SQLiteの奇妙な点、注意点、落とし穴」SQLite . 2025年1月24日閲覧
  35. ^ 「Unicode文字の大文字と小文字を区別しないマッチングが機能しない」。SQLiteに関するよくある質問2015年9月5日時点のオリジナルからアーカイブ。 2015年9月3日閲覧
  36. ^ 「SQLite FTS5拡張機能」 . SQLite . 2025年1月24日閲覧
  37. ^ 「JSON関数と演算子」 . SQLite . 2025年1月24日閲覧
  38. ^ 「SQLite Release 3.50.0 On 2025-05-29」 . SQLite . 2025年11月3日閲覧
  39. ^ 「SQLiteの制限」 . SQLite.org . 2021年11月7日時点のオリジナルよりアーカイブ2022年9月19日閲覧。
  40. ^ “Thoughts On The Design Of The Fossil DVCS” . Fossil-scm.org. 2017年7月12日. 2022年10月13日時点のオリジナルよりアーカイブ2022年10月14日閲覧。
  41. ^ “Fossil: Fossil Performance” . Fossil-scm.org. 2009年8月23日. 2009年10月9日時点のオリジナルよりアーカイブ。 2009年9月12日閲覧
  42. ^ "SQLite Copyright" . sqlite.org . 2024年3月15日時点のオリジナルよりアーカイブ2024年3月6日閲覧。
  43. ^ 「倫理規定」 . sqlite.org . 2024年2月19日時点のオリジナルよりアーカイブ2024年3月6日閲覧。
  44. ^ 「SQLiteのコマンドラインシェル」 . Sqlite.org. 2022年10月6日時点のオリジナルよりアーカイブ2022年10月14日閲覧。
  45. ^ 「SQLiteのテスト方法」 SQLite.org。2009年10月6日時点のオリジナルよりアーカイブ。 2009年9月12日閲覧
  46. ^ 「WindowsにインストールされているバージョンのSQLiteを使用するには」。2022年10月20日。2022年3月31日時点のオリジナルよりアーカイブ2022年3月31日閲覧。
  47. ^ "ホーム" . System.Data.SQLite . 2016年12月30日. 2014年7月13日時点のオリジナルよりアーカイブ。 2017年1月6日閲覧
  48. ^ "SQLite ODBC ドライバー" . Ch-werner.de . 2016年12月1日. 2014年6月26日時点のオリジナルよりアーカイブ。 2017年1月6日閲覧
  49. ^ 「OpenOffice.orgでSQLiteデータベースを使用する:バージョン2.0」(PDF) . Documentation.openoffice.org . 2011年9月28日時点のオリジナルからアーカイブ(PDF) . 2017年1月6日閲覧
  50. ^ "sqlite — Sqlite Wrappers" . SQLite.org. 2009年2月7日. 2009年2月5日時点のオリジナルよりアーカイブ2009年2月7日閲覧。
  51. ^ "sqlite3 WebAssembly & JavaScript ドキュメントインデックス" . SQLite . 2024年5月2日時点のオリジナルよりアーカイブ2023年5月8日閲覧。
  52. ^ 「Google Chromeの履歴の場所」 www.foxtonforensics.com 2020年10月6日. 2023年2月28日時点のオリジナルよりアーカイブ2020年10月6日閲覧。
  53. ^ 「SQLite Manager :: Firefox のアドオン」 . Addons.mozilla.org . 2015年2月28日. 2017年1月2日時点のオリジナルよりアーカイブ。 2017年1月6日閲覧
  54. ^ 「SQLite Manager – 🦊 Firefox (en-US) 向け拡張機能を入手」 . Addons.mozilla.org . 2018年7月24日. 2018年10月5日時点のオリジナルよりアーカイブ。 2018年10月5日閲覧
  55. ^ 「SQLite Reader – 🦊 Firefox (en-US) 向け拡張機能を入手」 . Addons.mozilla.org . 2018年9月1日. 2018年10月5日時点のオリジナルよりアーカイブ。 2018年10月5日閲覧
  56. ^ 「Apple Photoによると、SQLを使ってペリカンのベストショットを見つける」Simon Willisonのブログ2020年5月22日時点のオリジナルよりアーカイブ2020年5月23日閲覧
  57. ^ “Audacity 3.0.0 Released” . 2021年3月17日. 2023年8月14日時点のオリジナルよりアーカイブ2021年3月17日閲覧。
  58. ^ Hinegardner, Jeremy (2007年8月28日). 「SkypeクライアントでSQLiteを使用していますか?」 sqlite -users (メーリングリスト). 2007年11月17日時点のオリジナルよりアーカイブ2010年6月14日閲覧。
  59. ^ 「WhatsApp in Plain Sight: Where and How You Can Collect Forensic Artifacts」 www.group-ib.com 2019年11月7日. 2025年9月29日閲覧
  60. ^ 「補遺:Mac版Quickenで何年分の経費を予測する」 The Frugal Vagabond .
  61. ^ "sqlite3 — SQLiteデータベース用のDB-API 2.0インターフェース" . Python標準ライブラリドキュメント.

出典

さらに読む