初心者向け sqlite の始め方

19
初心者向け SQLite の始め方 SQLite Beginners Talk suno (すの) 2012-06-23 初心者向け SQLite の始め方 - SQLite Beginners Talk Powered by LibreOffice Impress 3.5.4.2

Upload: suno88

Post on 28-May-2015

3.573 views

Category:

Technology


4 download

DESCRIPTION

「NSEG 第 28 回勉強会 Feat. 高専カンファレンス」(2012/6/23)の LT スライドを一部改変したものです。

TRANSCRIPT

Page 1: 初心者向け SQLite の始め方

初心者向けSQLite の始め方

SQLite Beginners Talk

suno (すの)2012-06-23

初心者向け SQLite の始め方 - SQLite Beginners Talk Powered by LibreOffice Impress 3.5.4.2

Page 2: 初心者向け SQLite の始め方

自己紹介● 春原 宏保 (すのはら ひろやす

● プログラマー (Win32、Web)

● 長野市内の SIer 勤務

● Delphi、PHP、C#、C++、Java、JavaScript...

Page 3: 初心者向け SQLite の始め方

今日のお題は──

軽量データベースエンジン SQLite

Page 4: 初心者向け SQLite の始め方

SQLite とは● ファイルベースの RDBMS

● ユーザー権限とか、面倒な話は一切なし

● 小さくて軽い!

● Windows 版 sqlite3.dll (Version 3.7.13)599,419 バイト

● 高い信頼性

● バージョンアップして後悔した経験皆無(※)

(※) 個人の感想です

Page 5: 初心者向け SQLite の始め方

高い信頼性● SQLiteのテストコードは4567万8000行! 本

体のコードは6万7000行http://www.publickey1.jp/blog/10/sqlite45678000_67000.html

Page 6: 初心者向け SQLite の始め方

困ったら公式サイトへ● 公式サイト http://www.sqlite.org/

● 公式 Wiki http://www.sqlite.org/cvstrac/wiki

Page 7: 初心者向け SQLite の始め方

SQLite のデータ型● 以下の 5 つしかない

● NULL

● INTEGER

● REAL

● TEXT

● BLOB

● Datatypes In SQLite Version 3http://www.sqlite.org/datatype3.html

Page 8: 初心者向け SQLite の始め方

まずは使ってみよう● コマンドラインシェルで SQLite を体験

● コンソールから「sqlite3 データベース名」と入力

Page 9: 初心者向け SQLite の始め方

例C:\doc\nseg\sqlite>sqlite3 hoge.dbSQLite version 3.7.13 2012-06-11 02:05:22Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> CREATE TABLE test ( ...> id INTEGER PRIMARY KEY NOT NULL, ...> name TEXT NOT NULL DEFAULT '');sqlite> INSERT INTO test (id, name) ...> VALUES (1, 'Foo Bar');sqlite> INSERT INTO test (id, name) ...> VALUES (2, 'Hoge Fuga');sqlite> SELECT * FROM test;1|Foo Bar2|Hoge Fugasqlite> .q

C:\doc\nseg\sqlite>

Page 10: 初心者向け SQLite の始め方

PHP から SQLite を使う● php.ini で;extension=php_pdo_sqlite.dllの行を有効にすると、PDO で SQLite が使えるようになる

Page 11: 初心者向け SQLite の始め方

<?php// 接続if (!$db = new PDO("sqlite:test.db")) { die("DB connection failed.");}

// CREATE TABLE$sql = <<< __EOHDCREATE TABLE Test ( id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL DEFAULT '');__EOHD;if (!$db->query($sql)) { die("Create table failed.");}

Page 12: 初心者向け SQLite の始め方

// INSERT$stmt = $db->prepare("INSERT INTO test(id, name) " . "VALUES (:id, :name)");$arg = array(':id' => 1, ':name' => "Foo Bar");if (!$stmt->execute($arg)) { echo "Insert failed.";}$arg = array(':id' => 2, ':name' => "Hoge Fuga");if (!$stmt->execute($arg)) { echo "Insert failed.";}

// SELECT$stmt = $db->prepare("SELECT * FROM Test ORDER BY id");$stmt->execute();while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $id = $row['id']; $name = $row['name']; echo "id: $id, name: $name\n";}

Page 13: 初心者向け SQLite の始め方

INSERT 時の注意● 大量の行を INSERT する場合は、必ず

トランザクションで挟むこと!

● さもないと、ものすごく時間が掛かる

Page 14: 初心者向け SQLite の始め方

⼤量 INSERT の例<?php// 接続$db = new PDO("sqlite:trans.db");

// CREATE TABLE$sql = <<< __EOHDCREATE TABLE Test ( id INTEGER PRIMARY KEY NOT NULL, value INTEGER NOT NULL);__EOHD;$db->query($sql);

// 開始時刻$start_time = microtime(true) * 1000; // ミリ秒

Page 15: 初心者向け SQLite の始め方

// トランザクション開始$db->beginTransaction();

// 1,000 件 INSERT$stmt = $db->prepare("INSERT INTO test(id, value) " . "VALUES (:id, :value)");for ($i = 1; $i <= 1000; ++$i) { $arg = array(':id' => $i, ':value' => mt_rand()); $stmt->execute($arg);}

// トランザクション終了$db->commit();

// 終了時刻$end_time = microtime(true) * 1000; // ミリ秒

echo ($end_time - $start_time) . "ms elapsed.\n";

Page 16: 初心者向け SQLite の始め方

● トランザクションあり → 0.028 秒

● トランザクションなし → 7.232 秒

実際にやってみると……

INSERT 時にはトランザクションを

忘れずに!!

Page 17: 初心者向け SQLite の始め方

【特集】生まれ変わるPHP - Zend Engine 2、SQLiteの実力は? (8) MySQLとSQLiteの比較 - 大量のデータの書込みでは?http://news.mynavi.jp/special/2004/php5/007.html

このスクリプトは、両者とも全く同じく1000件のデータを連続して挿入する。実行結果は、予想外に圧倒的な大差がついた。(SQLite = 16.4 秒、MySQL = 0.4 秒)さすがはMySQLといったところだが、SQLiteの16秒は

ちょっとかかりすぎだろう。どうやら大量データの連続挿入はSQLiteの不得意な処理のようだ。

※「お詫びと訂正」が追記されています

Page 18: 初心者向け SQLite の始め方

かわいいよ

SQLite

かわいいよ

Page 19: 初心者向け SQLite の始め方

おしまい。

suno (すの)

suno88Inspired by @tmtms