SQLite : DROP TABLE IF EXIST でテーブルが無い時のエラーを無視する2018年08月24日 22時25分17秒

CREATE TABLE の同じテーブル名が存在した時のエラーを無視出来る様に、DROP TABLE のテーブルの有無のエラーを抑制出来る。
DROP TABLE IF EXISTS テーブル名;

DROP TABLE の場合は、CREATE TABLE の場合と違って、エラーを無視した時には副作用は無い。

% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> DROP TABLE IF EXISTS integers;
sqlite> .exit

SQLite データベース - Top

DROP TABLE を存在しないテーブルに行なった時の SQLite のエラー2018年08月23日 13時45分54秒

DROP TABLE は作成されたテーブルを削除するコマンド。DROP TABLE を存在しないテーブルに行なうとエラーになる。
% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> DROP TABLE integers;
Error: no such table: integers
sqlite> .exit

SQLite データベース - Top

CREATE TABLE IF NOT EXIST で同じ名前のテーブルがある時のエラーを無視する2018年08月22日 11時56分24秒

CREATE TABLE を二回行なうとエラーになる。 CREATE TABLE 同じ名前のテーブルは作れない。CREATE TABLE に IF NOT EXISTS を付けると、このエラーを無視することが出来る。
CREATE TABLE IF NOT EXISTS テーブル名 ( コラム名 [、コラム名…] );

しかし、ただ単にエラーを無視しただけなので、違うコラムで CREATE TABLE を行なっても、元のテーブルのまま。

% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE integers ( number INTEGER );
sqlite> CREATE TABLE IF NOT EXISTS integers ( number1 INTEGER, number2 INTEGER );
sqlite> .schema integers
CREATE TABLE integers ( number INTEGER );
sqlite> .exit

本稼働のシステムで日常的に使うには、疑問のある IF NOT EXISTS だが、やっつけ仕事のテスト環境や実験での使い勝手は良い。

SQLite データベース - Top

CREATE TABLE を二回行なった時の SQLite のエラー2018年08月21日 13時54分37秒

CREATE TABLE で SQLite のテーブルが作れる。しかし、CREATE TABLE を二回行なうとエラーになる。同じ名前のテーブルは作れない。
% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE integers ( number INTEGER );
sqlite> CREATE TABLE integers ( number INTEGER );
Error: table integers already exists
sqlite> .exit

SQLite データベース - Top

SQLite : DROP TABLE でテーブルを削除2018年08月20日 03時55分16秒

CREATE TABLE で作成されたテーブルは DROP TABLE で消すことが出来る。
DROP TABLE テーブル名

テーブルを二つ作成する。

% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE table1 ( number INTEGER );
sqlite> CREATE TABLE table2 ( number INTEGER );
sqlite> .tables
table1  table2
そのうちの一つを DROP TABLE で削除。
sqlite> DROP TABLE table1;
sqlite> .tables
table2
sqlite> 
DROP TABLE はテーブル名を一つしか取らないので、複数のテーブルを削除するには複数回 DROP TABLE をする必要がある。

また、テーブルのデータはテーブルと共に全て失われる。

SQLite データベース - Top

CREATE TABLE で SQLite でもしっかりデータ型を指定してテーブルを作成2018年08月18日 13時27分24秒

SQLite では入力型が動的判定されるので、型の指定も省略出来てしまうが、そうすると他のデータベースとの互換性が下がる 。
CREATE TABLE テーブル名 ( コラム名 データ型 [、コラム名 データ型…] );

前回と同じく整数を羅列するテーブルを作成してみる。

% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE integers ( number INTEGER );
sqlite> INSERT INTO integers VALUES ( 1 ), (3), (2 );
sqlite> SELECT * FROM integers;
1
3
2
sqlite> .exit

SQLite データベース - Top

CREATE TABLE で SQLite の一番単純なテーブルを作成2018年08月17日 15時08分13秒

データベースでは CREATE TABLE でテーブルを作成する。データベースを使う上でのまず第一歩。SQLite では入力型が動的判定されるので、型の指定も省略出来てしまう。
CREATE TABLE テーブル名 ( コラム名 [、コラム名…] );

整数を羅列するテーブルを作成してみる。

% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE integers ( number );
作成しただけでは、何があるのか見えないので、幾つかレコードを挿入して、表示をしてみる。
sqlite> INSERT INTO integers VALUES ( 1 ), (3), (2 );
sqlite> SELECT * FROM integers;
1
3
2
sqlite> .exit

SQLite データベース - Top

SQLite の .tables と .schema 等の内部コマンド2018年08月14日 18時15分37秒

SQLite の使い方と基本的なコマンドを幾つか。

まず、一番簡単な SQLite の起動の形。引数を何も指定しないで起動すると、一時的なデータベースを作成し、コマンドが終了すると消滅する。

% sqlite3
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> 
sqlite には内部コマンドが実装されていて、カンマから始まる。.help をすると一覧がでる。.exit で終了できる。「Ctrl-D」でも終了する。

ファイル名を指定して起動すると、データベースがファイルに保存される。

% sqlite3 /tmp/mysqlite.db
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.

他に、即戦力の内部コマンドは、テーブルの一覧が見られる .table とテーブルの定義、スキーマを表示する .schema だろう。

sqlite> create table integers (number);
sqlite> .tables
integers
sqlite> .schema numbers
CREATE TABLE integers (number);
sqlite> insert into integers values ( 1 ), (3), ( 2);
sqlite> select * from integers;
1
3
2
sqlite> .exit

SQLite データベース - Top

SQLite を FreeBSD にインストール2018年08月12日 11時19分12秒

SQLite に依存するオープンソースの製品は多い。恐らく、既に依存関係によってインストールされている場合が多いだろう。

pkg データベースを sqlite で探すとあれこれ各種拡張機能が沢山見付かる。

% pkg search sqlite
R-cran-RSQLite-1.0.0_2         Database Interface R driver for SQLite
R-cran-RSQLite.extfuns-0.0.1_9 SQLite extension functions for RSQLite
bogofilter-sqlite-1.2.4_3      Fast, teachable, learning spam detector
exim-sqlite-4.90.1             High performance MTA for Unix systems on the Internet
fpc-sqlite-3.0.4               Free Pascal interface to SQLite
gosqlite3-20120330_2           Go interface for SQLite3
...
その中の sqlite3 を root ユーザでインストールする。古いバージョンが欲しければ sqlite2 を入れる。
$ pkg install sqlite3

SQLite データベース - Top

SQLite3 のデータ型2018年08月11日 12時52分12秒

SQLite は明示的に型を指定しない。実行時に必要に応じて型変換を行う様だ。また、SQLite2 と SQLite3 では違う。読み込み時には型の決定を行わず、条件式を評価する段階に型変換を行う。

3の主なデータ型は以下の通り。コンピュータの基本的な型だ。

NULL
NULL値
INTEGER
負号付きの整数
REAL
浮動小数点数
TEXT
文字列 (UTF-8、UTF-16BE、UTF-16-LE)
BLOB
エンコードされない文字列

SQLite データベース - Top