クライアントからの接続先インスタンスの解説
SQLite は、アプリケーションの部品として機能するDBMSとして設計されている為、他のDBMSのように常駐インスタンスを持たない。
クライアントツールがDBMSのインスタンスとなる。
データベースの実体は、ファイルとして実装される。
データベースへのアクセスは、クライアントツールよりデータベースファイルを開くことにより、なされる。
クライアントツール
コマンドラインツール
sqlite3
使い方は .help コマンドで表示される。
GUIツール
DB Browser for SQLite
インスタンスへの接続・終了方法
コマンドラインツール
インスタンスへ接続する
常駐型インスタンスは存在しない。
以下の方法でデータベースファイルを開く。
sqlite3 データベース名
※データベースはファイルです。
終了方法
.exit
データベースへの接続や切替
SQLiteでは、データベースはファイルとして実装される。
データベースを開くとは、ファイルを開くこと。
データベースへ接続する
以下の方法でデータベースファイルを開く。
sqlite3 データベース名
※データベース名はファイル名です。
データベースを切替える
データベースはファイルなので、クライアントツールで開くファイルを変更すれば良い。
つまり、現在のファイルを閉じて、別のデータベースファイルを開けば良い。
現在の確認
現在接続しているデータベースを確認する
.show
現在のスキーマを確認する
SQLiteには、スキーマが無い。
現在のユーザーを確認する
SQLiteには、ユーザーもロールも無い。
一覧の表示
データベース一覧の表示
データベースはファイルなので、OSの機能でファイル一覧を確認すれば良い。
拡張子を自由に決められるので、データベースファイルを識別する事は一応可能。
スキーマ一覧の表示
SQLiteには、スキーマが無い。
テーブル一覧の表示
.tables
オブジェクト一覧の表示
.tables
ユーザー一覧の表示
SQLiteには、ユーザーもロールも無い。
ロール一覧の表示
SQLiteには、ユーザーもロールも無い。
個別情報の表示
テーブルのレイアウトを表示する
.schema テーブル名
ユーザーのロールを表示する
SQLiteには、ユーザーもロールも無い。
ファイル入出力
SELECT結果をテキストファイルへエクスポートする
.output ファイル名
このあとでselect文を実行すると、結果をファイルに出力する。
元に戻すとき。
.output stdout
テキストファイルをインポートする
CSVモードに切り替えてから、CSVファイルをインポートする。
.mode csv
.import ファイル名 テーブル名
作成する
データベースを作成する
sqlite3 データベース名
データベースファイルが存在しないときは、新規データベースを作成する。
スキーマを作成する
SQLiteには、スキーマが無い。
ユーザーを作成する
SQLiteには、ユーザーもロールも無い。
ユーザーに直接権限を与える
SQLiteには、ユーザーもロールも無い。
ロールを作成する
SQLiteには、ユーザーもロールも無い。
ロールをユーザーに割り当てる
SQLiteには、ユーザーもロールも無い。
テーブルを作成する
最小 CREATE TABLE
SQLiteではデータ型の指定を省略できる。
CREATE TABLE テーブル名(
列名1 [データ型] [オプション],
列名2 [データ型] [オプション] ,
.... ,
列名N [データ型] [オプション]
);
※注意点として、列名の変更ができないので、列名変更のときはテーブルを作り直す必要がある。
プライマリーキー1つ設定
CREATE TABLE テーブル名(
列名1 [データ型] [オプション] PRIMARY KEY,
列名2 [データ型] [オプション] ,
.... ,
列名N [データ型] [オプション]
);
プライマリーキー2つ設定
CREATE TABLE テーブル名(
列名1 [データ型] [オプション],
列名2 [データ型] [オプション] ,
.... ,
列名N [データ型] [オプション],
PRIMARY KEY( 列名1, 列名2 )
);
外部キー設定
列名2が対象テーブルのキーである場合。仮にキー名をIDとする。
CREATE TABLE テーブル名(
列名1 データ型 [オプション],
列名2 データ型 [オプション] ,
.... ,
列名N データ型 [オプション],
FOREIGN KEY ( 列名2 ) REFERENCES 対象テーブル名 ( ID )
);
対象キーが複数の場合は、
FOREIGN KEY ( 列名2, 列名3 ) REFERENCES 対象テーブル名 ( ID1, ID2 )
文字列データ型
TEXT
文字エンコーディングについて
SQLiteが対応している文字エンコーディングは、主にUTF-8, UTF-16LE, UTF-16BE の3種類。
他にも以下の文字エンコーディングをサポートしている。
UTF-8
UTF-16BE
UTF-16LE
UTF-16
UTF-32BE
UTF-32LE
UTF-32
ISO-8859-1
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
データベース単位で文字エンコーディングを設定する。
現在使用しているデータベースの文字エンコーディングを確認するには以下のコマンドを使用する。
pragma encoding ;
また、文字エンコーディングを変更する場合は、以下のようにする。
pragma encoding = '文字エンコーディング名' ;
(引用符で囲むことを忘れずに)
数値データ型
INTEGER 整数
REAL 浮動小数点数(8バイト)
日時データ型
日付/時刻のデータ型が存在しない。
’2021-06-01 10:05:03′ というフォーマットの文字列を使用する。
日時文字列の差分を計算する関数は存在する。
バイナリデータ型
BLOB
ビューを作成する
CREATE VIEW ビュー名 AS SELECT文;
インデックスを作成する
CREATE INDEX インデックス名 ON 対象テーブル名 (対象カラム名1, 対象カラム名2,…);
ストアド・プロシージャを作成する
SQLiteにストアド・プロシージャは存在しない。
ストアド・ファンクションを作成する
SQLiteにストアド・ファンクションは存在しない。
リテラル・代入・演算子
リテラル
文字列は単一引用符で囲む。二重引用符ではなく単一引用符である。
文字列中で単一引用符を使用する場合は、単一引用符を二つ続けて書く。
例: ’text’ , ‘I”m fine.’
変数
SQLite には、変数を宣言する機能は存在しない。
代入
変数が存在しないので、代入も存在しない。
演算子
加算 A + B
減算 A – B
乗算 A * B
除算 A / B
剰余 A % B
文字列連結 文字列A || 文字列B
「AがBより小さい」 A < B
「AはB以下」 A <= B
「AがBより大きい」 A > B
「AはB以上」 A >= B
「AとBは等しい」 A = B
「AとBは等しくない」 A != B または A <> B
論理演算
AND , OR , NOT
条件式やループなど
条件文もループも存在しない。
ストアドの例外処理の書き方
SQLiteにストアド・プロシージャ・ファンクションは存在しないため、例外処理も存在しない。
SQLの方言
コメントの書き方
-- 行コメント
/* コメント開始
複数行コメント
コメント終わり */
SELECT文の方言
特に無し。
INSERT文の方言
列名の省略が可能。
INSERT INTO テーブル名 VALUES(値1 , 値2 , … ) ;
UPDATE文の方言
特に無し。
DELETE文の方言
特に無し。
オブジェクトの存在確認の方法
SQLiteはデフォルトでは大文字を小文字を区別するので注意。
オブジェクトの存在は以下のSQLITE_MASTERで確認する。
name にオブジェクト名が存在するかSELECT文で確認する。
SELECT COUNT(*)
FROM SQLITE_MASTER
WHERE TYPE='table' AND name='オブジェクト名';
WHERE句に collate nocase を指定すると大文字と小文字を区別しないで検索してくれる。
WHERE TYPE='table' AND name='オブジェクト名' collate nocase ;
トランザクションの使い方
SQLiteでは複数ユーザー又は複数アプリからの同時アクセス更新には対応していない。
よって、トランザクション機能は必要無い。
ちなみに、複数アプリからの同時参照なら可能である。
トランザクションの開始
無し。
コミット
無し。
ロールバック
無し。