SQLite/基本操作

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

手元のコマンドラインでSQLite を使う場合について説明します。

サーバの設定は無い[編集]

サーバを立てる必要はありませんし、そのような設定も特にありません。 なのでサーバ起動コマンドはありません。

よって、いきなり後述のデータベース作成コマンド

 sqlite3 データベース名

で作成開始するのがSQLiteの作法です。

開始と終了[編集]

データベースの作成[編集]

いきなりコマンド

sqlite3 データベース名

で作成開始します。(※説明が再掲で重複だが、検索でたどりついた人のために再掲している。)

事前のsqlite3へのログインのコマンドはありません。そもそもサーバではないので、ログイン不要です。


例えば、sample.db というデータベース名で作成したいなら

sqlite3 sample.db

のようになります。

このデータベース名は、いったんSQLiteを終了したあとの再開に必要になるので、実務では忘れないようにメモしてください。

なお、拡張子は何でも構わないので、たとえば「sample.sqlite」や「sample.sqlite3」などでも構いません。本ページではコマンド名との区別しやすさのため拡張子は「.db」にします。ただし、複数のデータベースを使っていてsqliteのほかにmusqlなども使っている環境では、区別のために「.sqlite」のような対応ソフトの種類の分かる拡張子を付ける場合もあります。


末尾の数字はバージョン番号ですので、お使いのバージョンによって変わります。

これで、コマンドラインの一般の入力モードから、SQLite専用の入力モードに変わります。

sqlite3とだけコマンドした場合[編集]

コマンド

sqlite3

でした場合、これはメモリ上の仮想データベースへのアクセスです(sqlite3へのアクセスのコマンドではないです)。

もとの一般コマンドライン入力モードに戻したい場合には、後述の終了コマンド .exit または .quit を使います。

終了コマンド[編集]

SQLite 操作を終了するためのコマンドは

.exit または .quit です。

これで、SQLite専用の入力モードが終わるので、もとの通常のコマンドラインの入力モードに戻ります。

コマンドミスからの復旧法[編集]

コマンドミスなどで

  ...> 

と表示される場合があります。 これに別のコマンドを入れても、

  ...> 何かのコマンド
  ...> 

のように、何度も同じ入力モードが続いてしまいます。

これは、長いコマンドを入力するモードが起動してしまっている状態です。この長文コマンド入力モードを終了させるには、セミコロン「;」を入力すれば終了します。

   ...> ..exit
   ...> 
   ...> ;
Error: near "sqlite3": syntax error
sqlite> 

のように、エラーになって終わります。

万が一エラーにならずに何かのコマンドが実行されないように、セミコロン前に意図的にデタラメな文字列「sfoa Uhf uhu d23」とか入力しておけば、確実に安全終了できるかもしれません。


テーブル[編集]

テーブルの作成[編集]

では、さっそくデータの中身を作るとしましょう。下記のようなデータを作りたいとします。

SQLite では、右図のような、テーブル的なデータベースを作れます。(ただし、SQLだけでは画像的には表示されないです。右図は、説明のために載せています。)

元素番号 元素名 元素記号
1 水素 H
6 炭素 C
7 窒素 N
8 酸素 O
16 硫黄 S
20 カルシウム Ca
26 Fe
29 Cu
47 Ag
79 Au


まず、テーブルを作成する場合には手順として、図の「元素番号」,「元素名」、「元素記号」に相当するような、タイトル部分を作らないといけません。

次のようなコマンドで作ります。

create table testTable( gensobangou ,gensomei ,gensokigou );

書式は

create table 接続中のテーブル名( 1列目の名称 , 2列目の名称 , 3列目の名称 ;

です。

なおこの上記コマンドの書式は、mysql のコマンドから型名を除いただけの書式です(2021年現在)。

create database コマンドだけでは、データベースの入れ物を作っただけです。

まだ、中身は無い状態です。

型はつけられるが機能しない

実は型(int型やtext型など)をつけて create 可能であり、つまり

create table testTable( gensobangou int,gensomei text,gensokigou text );

でも一般的には作成可能です。しかし、型は項目の作成時には無視されます。(おそらくMySQLなど別データベースとのコマンドとの互換性のために、SQliteでも型名をつけたまでもcrate可能な機能を残していると思われます。)

型としては認識しないので、なので後の工程でたとえば、int型として宣言したはずの gensobangou にたとえば「2」(なおヘリウム He の原子番号)ではなく、「"asdf"」のような単なる文字列を入れても、そのまま認識してしまいます(つまり、整数型としては機能しません)。

(※ Fedora 35 上のOSインストール用の SQLite で確認。2021年11月11日。)


テーブル構造の閲覧は無い[編集]

作成したテーブル構造の情報を見る方法(MySQLでいうdescコマンドのようなもの)は、SQLiteにはありません。


テーブルへのデータの登録[編集]

ではさっそく、1番目の水素のデータをつけたしてみましょう。

insert into testTable (gensobangou,gensomei,gensokigou) values(1, "Hydrogen", "H" );


テーブルへのデータの登録のコマンドは、

insert into テーブル名 (登録ずみの列名1, 登録ずみの列名2, 登録ずみの列名3) values( 登録するデータ1, 登録するデータ2, 登録するデータ3 );

のような書式になります。なおこの上記コマンドの書式は、mysql のコマンドと同じ書式です(2021年現在)。


テーブルに登録されたデータ内容を表示するには select 列名 from テーブル名; で表示できます。

たとえば、コマンドと結果をあわせて下記のようになります。

sqlite> select * from testTable;
1|Hydrogen|H

* 」とは、この場合では「すべて」を意味する、コンピュータ業界の慣用句であり、このような意味での「*」の呼び名を『ワイルドカート』と言います。

まだ、1行目しか登録してないので、1行ぶんしか表示されないですが、もし2行目以降を登録すれば、2行目以降も select で表示されるようになります。


なお、このようにして登録された「 1, Hydrogen, H 」のような、SQLテーブルの中身の情報の行(ぎょう)のことを「レコード」と言います。


さて、もしアナタが文献調査か何かで「『Helium』(ヘリウム)という元素があるという事が分かり、元素記号も「He」だと分かったが、しかし元素番号が分からない」というように、部分的にしか情報が分からなくても、部分的にだけデータを登録することも可能です。

タイトルすべてを列記する必要はなく、

sqlite> insert into testTable (gensobangou, gensomei) values(2, "Helium" );

のように、最初のカッコで、分かった項目の列タイトルだけを書いておけば、vaules の中身をその順番どおりに登録します。


また、select * すれば、表示結果は

sqlite> select * from testTable;
1|Hydrogen|H
2|Helium|

となります。上記のように、未登録のデータの部分には空白「  」で表示されます。

データの部分削除[編集]

たとえば、ヘリウムのgensomeiデータ「Helium」の行(レコード)を削除したい場合、

sqlite>  delete from testTable where gensomei = "Helium";

となります。

これをすると、消えるのは、Helium という名前に加えて、gensobangou(元素番号)の「2」も消えます。


実際、delete のあとに show してみると

sqlite> select * from testTable;
1|Hydrogen|H

のように、消えるのは文字列「Helium 」だけでなく、元素番号「2」も消えています。


終了後の再開[編集]

再開したい場合、コマンド

.open データベース名

です。

たとえば、データベース名が sample.db なら

.open sample.db

のようになります。

どんなテーブルがあるか忘れていて確認したいなら、コマンド

.table

です。

本ページの上記の操作をしている場合、

sqlite> .table
testTable

のような表示になります。