SQLite 概要

本チュートリアルでは、SQLiteとは何か、SQLとの違い、なぜそれが必要なのか、そしてアプリケーションのデータベース処理方法について理解することができます。

SQLiteは、自己完結型、サーバーレス、ゼロ設定、トランザクション対応のSQLデータベースエンジンを実装したソフトウェアライブラリです。SQLiteは最も急速に成長しているデータベースエンジンであり、これは規模とは無関係に普及の面での成長です。SQLiteのソースコードは著作権の制限を受けません。

SQLiteとは?

SQLiteはプロセス内ライブラリであり、自己完結型、サーバーレス、ゼロ設定、トランザクション対応のSQLデータベースエンジンを実装しています。ゼロ設定のデータベースであり、他のデータベースとは異なり、システムでの設定が不要であることを意味します。

他のデータベースと同様、SQLiteエンジンは独立したプロセスではなく、アプリケーションの要件に応じて静的または動的に接続できる。SQLiteはストレージファイルに直接アクセスする。

なぜSQLiteを使うのか?

  • 独立したサーバープロセスやオペレーティングシステムを必要としません(サーバーレス)。

  • SQLiteは設定が不要で、インストールや管理が不要であることを意味します。

  • 完全なSQLiteデータベースは、単一のクロスプラットフォームのディスクファイルに格納されます。

  • SQLiteは非常に小さく、軽量で、完全構成時は400KiB未満、オプション機能を省略した構成時は250KiB未満です。

  • SQLiteは自己完結型であり、外部依存が一切不要であることを意味します。

  • SQLiteのトランザクションはACIDに完全準拠しており、複数のプロセスやスレッドからの安全なアクセスが可能です。

  • SQLiteはSQL92(SQL2)標準のクエリ言語機能の大部分をサポートしています。

  • SQLiteはANSI-Cで書かれており、シンプルで使いやすいAPIを提供します。

  • SQLiteはUNIX(Linux, Mac OS-X, Android, iOS)およびWindows(Win32, WinCE, WinRT)で動作します。

歴史

  1. 2000年 -- D. Richard Hippは、管理を必要とせずにプログラムを操作するためにSQLiteを設計しました。

  2. 2000年 -- 8月、SQLite 1.0がGNUデータベースマネージャー(GNU Database Manager)としてリリースされました。

  3. 2011年 -- Hippは、SQLite DBにUNQLインターフェースを追加し、UNQLite(ドキュメント指向データベース)を開発すると発表しました。

SQLiteの制限

SQLiteにおいて、SQL92でサポートされていない機能は次のとおりです:

機能説明
RIGHT OUTER JOINLEFT OUTER JOINのみが実装されています。
FULL OUTER JOINLEFT OUTER JOINのみが実装されています。
ALTER TABLERENAME TABLEおよびALTER TABLEのADD COLUMN variantsコマンドをサポートしますが、DROP COLUMN、ALTER COLUMN、ADD CONSTRAINTはサポートしません。
トリガーサポートFOR EACH ROWトリガーはサポートしますが、FOR EACH STATEMENTトリガーはサポートしません。
VIEWsSQLiteでは、ビューは読み取り専用です。ビューに対してDELETE、INSERT、UPDATE文を実行することはできません。
GRANT と REVOKE適用できる唯一のアクセス権限は、基盤となるオペレーティングシステムの通常のファイルアクセス権限です。

SQLiteコマンド

リレーショナルデータベースと対話するための標準SQLiteコマンドはSQLに似ています。コマンドにはCREATE、SELECT、INSERT、UPDATE、DELETE、DROPが含まれます。これらのコマンドは、その操作の性質に基づいて次のように分類できます:

DDL - データ定義言語

コマンド説明
CREATE新しいテーブル、テーブルのビュー、またはデータベース内の他のオブジェクトを作成します。
ALTERデータベース内の既存のデータベースオブジェクト(テーブルなど)を変更します。
DROPテーブル全体、テーブルのビュー、またはデータベース内の他のオブジェクトを削除します。

DML - データ操作言語

コマンド説明
INSERTレコードを作成します。
UPDATEレコードを変更します。
DELETEレコードを削除します。

DQL - データ問い合わせ言語

コマンド説明
SELECT1つまたは複数のテーブルから特定のレコードを取得します。
その他の拡張