主流DBMS基本操作集 SQLite編

技術的備忘録

 

表紙ページへ戻る

 

  1. クライアントからの接続先インスタンスの解説
  2. クライアントツール
    1. コマンドラインツール
    2. GUIツール
  3. インスタンスへの接続・終了方法
    1. コマンドラインツール
      1. インスタンスへ接続する
      2. 終了方法
  4. データベースへの接続や切替
    1. データベースへ接続する
    2. データベースを切替える
  5. 現在の確認
    1. 現在接続しているデータベースを確認する
    2. 現在のスキーマを確認する
    3. 現在のユーザーを確認する
  6. 一覧の表示
    1. データベース一覧の表示
    2. スキーマ一覧の表示
    3. テーブル一覧の表示
    4. オブジェクト一覧の表示
    5. ユーザー一覧の表示
    6. ロール一覧の表示
  7. 個別情報の表示
    1. テーブルのレイアウトを表示する
    2. ユーザーのロールを表示する
  8. ファイル入出力
    1. SELECT結果をテキストファイルへエクスポートする
    2. テキストファイルをインポートする
  9. 作成する
    1. データベースを作成する
    2. スキーマを作成する
    3. ユーザーを作成する
    4. ユーザーに直接権限を与える
    5. ロールを作成する
    6. ロールをユーザーに割り当てる
    7. テーブルを作成する
      1. 最小 CREATE TABLE
      2. プライマリーキー1つ設定
      3. プライマリーキー2つ設定
      4. 外部キー設定
      5. 文字列データ型
        1. 文字エンコーディングについて
      6. 数値データ型
      7. 日時データ型
      8. バイナリデータ型
    8. ビューを作成する
    9. インデックスを作成する
    10. ストアド・プロシージャを作成する
    11. ストアド・ファンクションを作成する
    12. リテラル・代入・演算子
      1. リテラル
      2. 変数
      3. 代入
      4. 演算子
    13. 条件式やループなど
    14. ストアドの例外処理の書き方
  10. SQLの方言
    1. コメントの書き方
    2. SELECT文の方言
    3. INSERT文の方言
    4. UPDATE文の方言
    5. DELETE文の方言
    6. オブジェクトの存在確認の方法
  11. トランザクションの使い方
    1. トランザクションの開始
    2. コミット
    3. ロールバック

クライアントからの接続先インスタンスの解説

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では複数ユーザー又は複数アプリからの同時アクセス更新には対応していない。

よって、トランザクション機能は必要無い。

ちなみに、複数アプリからの同時参照なら可能である。

トランザクションの開始

無し。

コミット

無し。

ロールバック

無し。

 

 

表紙ページへ戻る

タイトルとURLをコピーしました