Closed4

SQLiteに入門する。

ymgnymgn

0章

基本

SQLコマンドは以下の3種類に分類される。

  • データ操作言語(DML: Data Manipulation Language)
  • データ定義言語(DDL: Data Definition Language)
  • データ制御言語(DCL: Data Control Language)

DML

INSERT, SELECT, UPDATE, DELETEなど。

DDL

デーブル作成、インデックスやビューの作成、トリガーの作成など。

DCL

トランザクションの制御やロックの制御など。

SQLiteの手軽さとデメリット

  • SQLiteはユーザの概念がないため、どのユーザがデータベースにアクセスできるかの権限設定ができない
  • データ型の管理を行わないため、数値型のフィールドに文字列を格納することもできてしまう

というSQLiteの手軽さとデメリットが挙げられていた。

とは言え現代ではLineterを入れたりORMやQuery builderを使えば型の不一致は起こらなそうなので心配する必要はない。

データ型

データ型 意味
NULL データが入っていない状態
INTEGER 正負の整数。データにより、1、2、3、4、6、8バイトのサイズをとる
REAL 8バイトのIEEE浮動小数点数
TEXT 文字列。UTF-8、UTF-16BE、UTF-16-LEのエンコーディングを使用する
BLOB Binary Large OBjectの略。入力されたデータがそのままの形で格納される

システムテーブル

SQLiteのシステムテーブルは全て読み取り専用。

テーブル名 内容 補足
sqlite_master テーブルの定義 テーブルを作成した時に実行したCREATE TABLEコマンドが格納される
sqlite_temp_table テンポラリテーブルの定義 テンポラリテーブルを作成した時に実行したCREATE TEMPORARY TABLEコマンドが格納される
sqlite_sequence オートナンバーの最大値 オートナンバーを指定したフィールドの最大値が格納される
sqlite_stat1 統計情報 ANALYZEコマンドによって収集された統計情報が格納される

SQLiteでできること

  • テーブル、ビュー
  • インデックス
  • トランザクション
  • 主キー、外部キーなどのフィールド制約
  • オートナンバー

SQLコマンドはSQL92に準拠しており、基本的なSQLコマンドや関数、演算子を使用することもできる。
OUTER JOINやUNIONもサポートされている。

SQLiteでできないこと

  • トリガーの一部機能
  • フィールドの追加意外のALTER TABLEコマンド
  • 右外部結合および完全外部結合
  • ビューへの書き込み
  • GRANTおよびREVOKEコマンド

FOR EACH STATEMENTトリガーや、テーブルに対してのINSTEAD OFトリガーを指定することはできない。
ALTER TABLEコマンドはフィールドの追加のみサポートされており、削除やフィールド名の変更はサポート外。
また、右外部結合(RIGHT JOIN)と完全外部結合(FULL OUTER JOIN)はサポート外。
さらに、ビューは読み取り専用だが、トリガーないではビューに対してDELETEやINSERT、UPDATEも実行できる。

SQLiteにはユーザ権限という概念はないため、GRANT、REVOKEといったユーザ権限に関するSQLコマンドを実行できない。

PRAGMAコマンド

SQLite独自のコマンドだそう。
SQLite自体の動作を変更したり、その設定内容をライブラリに問い合わせるために使用するコマンド。

関数

大きく分けて、集計、文字列、日付、変換、算術、分析、その他の7種類の関数が定義されているそう。

演算子

大きく分けて、集合、算術、ビット、比較、論理、単項、その他の7種類の演算子が定義されているそう。

エンコーディング

SQLite 3ではUTF-8とUTF-16のエンコーディングを扱うことができる。

ファイル構成

SQLiteではデータベースファイルの他に、7種類のファイルを一時的に生成し使用する。
これらのファイルはSQLiteが必要に応じて自動的に生成し、自動的に削除する。

ファイル 意味
ロールバックジャーナル トランザクションのロールバックの際に使用される
マスタージャーナル 1つのトランザクションの処理中に、メインのデータベースとあタッチされたデータベースに対して更新をかけた時に生成される
ステートメントジャーナル トランザクションの処理中に、多くのデータを対象とした更新クエリを実行する際のロールバックのために使用される
TEMPデータベース CREATE TEMP TABLEコマンドを使用した際に作成される
ビューとサブクエリのマテリアライズ 複雑なサブクエリを使用する際、クエリの結果を一時的に保存するために使用される
一時的なインデックスリスト ORDER BYやUNIONなどのクエリで一時的に使用するインデックスを保持するために使用される
VACUUMによって使用された一時的なデータベース VACUUMコマンドの実行時、リビルドしたデータを一時的に保持するために使用される

VACUUMコマンド

SQLiteでは、削除したデータがそれまで使用していたディスク領域はそのまま解放されず、パフォーマンス悪化に繋がる。
VACUUMコマンドは不要になったディスク領域を解放してくれる。

予約語

SQLiteでは多くの予約語が定義されている。
ここは被らないように気をつければいいだけの話なので深く覚えなくていいかな。

コメント

SQLiteのコメントの書き方は2種類ある。

-- これは1行だけのコメントです

/*
これは複数行
のコメントです。
*/
ymgnymgn

1章

SQLiteのインストール方法と起動方法が書いていた。
省略。

このスクラップは2023/11/13にクローズされました