ウェブサイト検索

初心者のためのSQLite Linuxチュートリアル


このSQLite Linuxチュートリアルは、SQLiteデータベースの使い方を学びたい初心者向けに作られています。SQLiteは、世界で最も広く使われているデータベースプログラムの一つです。それでは、データベースとは何か、SQLiteとは何かを見てみましょう。

このチュートリアルでは、あなたは学びます:

  • データベースとは何か、SQLiteとは何か
  • クイックインストール
  • SQLiteを使用してデータベースを作成する方法
  • SQLiteの基本

これにより、あなたは自分自身のシンプルなデータベースを作成でき、必要なときや場所で迅速に利用できるようになります。SQLiteは世界中の多くのデバイスで使用されています。これはコンピュータ学習の基本的な部分と考えるべきです。

ソフトウェアの要件と使用される規約

SQLiteとは何ですか、そしてデータベースとは何ですか?

SQLiteは、SQLデータベース記述言語のサブセットを使用するオープンソースのデータベースプログラムです。データベースは、同様の情報の束を1つの場所に集めるのに役立ちます。SQLはよく知られたオープンスタンダードです。データベースクエリ言語は、データベースから特定のデータを抽出するクエリを送信したり、すべてのデータを選択したりすることができます。

なぜSQLiteなのか?
最大かつ最も重要な理由はシンプルさです。私が自分が書いていたアプリケーションにデータベースを使用しなければならないことに気づいたとき、適切な候補を見つけるのは簡単ではありませんでした。ほとんどのデータベースはサーバーのような複雑なシステムです。そして、それが多くの人に呼ばれている「データベースサーバー」です。このようなものは、通常、設定、管理、および維持を行うために専門家のチームを必要とします。しかし、SQLiteを使えば、自分自身で、自分のデータベースを作成、管理、および維持することが非常に簡単です。しかし、前述のようにもう一つの良い理由は、SQLiteが世界で最も広く使用されているデータベースプログラムの一つであり、私たちの研究に値するツールであることです。

クイックインストール

さあ、始めましょう。このチュートリアルはプログラムのインストールについてではありません。そのための他の多くのチュートリアルがあります。しかし、Linuxに不慣れな人に役立つかもしれないいくつかのポイントを示します。たとえば、Debianでは、次のコマンドを発行します:

apt install sqlite

おそらくSQLiteのバージョン3をインストールするでしょう。Gentooでは、次のようになります:

emerge sqlite

その後、ポータージュは自動的に最新のバージョンをロードしてコンパイルします。あなたのディストリビューションのドキュメントを参照してください。(synapticは、別の人気のあるインストーラーです。)

ソースコードから構築することを好む方のために、次のスクリプトを入力するか、ダウンロードできます:

FILE=sqlite-autoconf-3360000
wget --show-progress https://sqlite.org/2021/${FILE}.tar.gz
tar zxvf ${FILE}.tar.gz
cd ${FILE}
./configure --prefix=/usr/local
make
sudo make install
cd -

さて、インストールに成功した場合は、次のコマンドを入力してください:

sqlite

おそらく次のようなメッセージが届くでしょう:

bash: sqlite: command not found

もし<UP-ARROW>を押した後に<ENTER>を押すと、次のように表示されるでしょう:

sqlite3
SQLite version 3.35.5 2021-04-19 18:32:05
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 

それが得られるものであれば、私たちは準備万端です!(適切な表現に置き換えてください...) そうでなければ、あなたのインターネット検索エンジンが友達です。

「sqlite>」プロンプトの意味は、SQLiteが動作しており、あなたの指示に従う準備ができていることです。今、^D または .exit と入力して終了してください。

例として、任意の人物、今回はコイン収集家(numismatist)を想定します。データベースの名前はnumismatist.dbとし、スキーマテーブルの名前はcoinsとします。もちろん、例を使用しながら変更することを歓迎しており、奨励します。

SQLiteを使用し始める方法はいくつかあります。まずはテキストファイルの表現から始め、そこから進めていきます。お気に入りのテキストエディタを開いて、numismatist.sqlを以下の内容に編集してください(まだエディタを持っていない場合でも、読み進めればすぐに作業を終えることができるでしょう)。

/*
 * numismatist.sql	Beginner's database
 */

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;

Create Table coins(
	denomination	TEXT,
	value		FLOAT,
	comments	TEXT
);

Insert into coins values(
	'Quarter',
	30.35,
	'Gift from Grandpa'
);

COMMIT;

では、このファイルを保存し、自分用にもコピーを作成してください。新しいデータベースを作成したいときに備えて、例えば:

cp numismatist.sql skeleton.sql
chmod -w skeleton.sql

さあ、いつでも始め直したり、自分のデータベースを作成したい場合は、修正して拡張するための簡単な例があります。(または、makeに慣れている人のために、makeファイルの新しいセクションに入れて、makeに作業を任せることもできます。)

次に、SQLiteに対して、先ほど作成したファイルのコマンドを使用してデータベースを作成するように指示する必要があります。それから、本物のデータベースが出来上がります。

cat numismatist.sql | sqlite3 numismatist.db

これがうまくいったことを確認するためにテストしてください:

sqlite3 numismatist.db 'select * from coins'

あなたは次のようなものを非常に似たものを見るべきです:

Quarter|30.35|Gift from Grandpa

これらすべてはSQLite内部から行うことができます。たとえば、エディターがない場合や、SQLiteのコマンドラインの動作を学ぶために直接作業したい場合です。次のように入力してください:

sqlite3 numismatist.db

ヘルプを得るには、man sqlite3を使用するか、sqlite>のプロンプトで.helpと入力してください。その後、上記のnumismatist.sqlファイルのコマンドを入力します。では、入力してください:

sqlite> select * from coins;

もう一度、あなたは見るべきです:

Quarter|30.35|Gift from Grandpa

さて、私たちはデータベースを持っています。それをもう少し詳しく見てみましょう。create table coins(... コマンドは、データベースのレコードフォーマットを作成しました。

insert into coins values(... は実際に1件のレコードを追加しました。今、<UP-ARROW> を押し続けることで、心ゆくまでレコードの編集や追加ができます。レコードをリストアップするには、select * from coins; を使用します。; を追加し忘れると、...> という継続プロンプトが表示されます。そこに; を入力すると、コマンドが終了します。

データベースの利用方法

最も基本的なビルディングブロックであるデータベースができたので、このデータベースが大きくなるにつれて何が起こるかを探ってみましょう。データベースは通常非常に大きいですよね?では、テストのために10億行ものデータをデータベースに入力するにはどうすればよいでしょうか?誰もそんなことはしないでしょう!簡単です。こちらのスクリプトを使ってください(bashを使用する場合):


#!/bin/bash
function my_insert() {
      echo "insert into coins values('$1', $2, 'From Grandpa');"
}
i=1.25        # establish minimum coin value
for a in `seq 1 10000` ; do
      new_val=`calc "$i+$RANDOM/1000"`
      my_insert "Quarter-$a" $new_val >> big_add-list
      printf "Processing %i\n" $a # modulo 100 == 0 would be better
done

さて、新しいコマンドを既存のデータベースに統合してください:

cat big_add-list | sqlite3 numismatist.db
sqlite3 numismatist.db 'select * from coins'
Quarter|30.35|Gift from Grandpa
Quarter-1|126.11|From Grandpa
Quarter-2|193.31|From Grandpa
		.
		.
		.
Quarter-9998|290.69|From Grandpa
Quarter-9999|211.44|From Grandpa
Quarter-10000|286.31|From Grandpa

さて、これがそれです。記録が満載の大規模なデータベースです。このデータベースに直接アクセスして手動で探索することをお勧めします。記録を追加、削除、変更することができ、操作の仕組みを理解するまで満足するまで行えます。もし壊してしまったら、何をして壊したのか理解しようとし、その後、単に捨ててバックアップを復元するのではなく、修復を試みてください。

これは貴重な教訓です。今、データベースにレコードを追加したいときは、すべての挿入コマンドをファイルにまとめて、それをSQLiteにパイプするだけです。

SQLiteの基本

しかし、これがSQLiteでできるすべてではありません。SQLiteライブラリを含むプログラムを書いて、望むものを作成することができます。前述のように、bashやその他のスクリプトを使用して、広範囲で非常に複雑なデータベースを作成するのを助けることができます。独自の方法でデータベースをクエリするためにselectコマンドを探索できます。これはほんの始まりに過ぎません。

SQLiteの旅で次に学びたいかもしれない多くのことのいくつかを以下に示します。たくさんあるので、これを完全なリストだとは考えないでください:

  • C/C++プログラムインターフェース
  • Pythonインターフェース
  • SQLiteブラウザ

最も一般的なSQLiteコマンドのいくつかを説明しなければ、不作法になるでしょう。まず、SQLiteコマンド内で使用されるドットコマンドですが、マニュアルページと.helpコマンドを参照してください。これらはより完全です:

sqlite> .help
.open		clears out memory
.open FILE	clears memory, then opens FILE
.dump		converts resident database to TEXT
.exit, .quit	terminates current session
.read FILE	reads database named FILE
.read '|cmd'	execute command 'cmd', then read its stream
.output	?FILE?	send output to FILE; reset to STDOUT
.shell, .system	execute an Operating System (shell) command
.save		writes database to storage
.show		display settings
.cd		change directory
.lint		identify possible schema errors

最後に、ここにレコードに含まれる可能性のあるタイプを示します(リストは完全ではありません):

  • NULLの空またはnull値
  • 1から8バイトの整数
  • FLOAT 8バイト IEEE浮動小数点数
  • テキスト UTF-8 テキスト文字列(現在のLinuxのデフォルト)
  • BLOBデータはそのまま保存されます。例:photo/jpeg、大きなテキスト、バイナリ

結論

このSQLite Linuxチュートリアルでは、データベースの作成が非常に簡単な作業であることを見てきました。SQLiteと組み合わせることで、誰でもデータベースが一般的に扱う作業を大幅に簡素化する力を持っています。ここでユーザーが実験するためのいくつかの提案があります:

  • 住所と電話帳
  • 在庫(コインコレクションなど)
  • TODOリスト
  • アーカイブファイル:写真;手紙;履歴書;この記事などの文書
  • 本や写本全体を検索可能なデータベースに分解します。(これは著者が最初のデータベース経験のために取り組んだ作業です。実際には複数の写本を同時に扱っています。)

この記事を楽しんでいただけたことを願っています。フィードバックがあれば、お気軽にお知らせください。

関連記事: