初心者向け sqlite の始め方
DESCRIPTION
「NSEG 第 28 回勉強会 Feat. 高専カンファレンス」(2012/6/23)の LT スライドを一部改変したものです。TRANSCRIPT
![Page 1: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/1.jpg)
初心者向けSQLite の始め方
SQLite Beginners Talk
suno (すの)2012-06-23
初心者向け SQLite の始め方 - SQLite Beginners Talk Powered by LibreOffice Impress 3.5.4.2
![Page 2: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/2.jpg)
自己紹介● 春原 宏保 (すのはら ひろやす
● プログラマー (Win32、Web)
● 長野市内の SIer 勤務
● Delphi、PHP、C#、C++、Java、JavaScript...
![Page 3: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/3.jpg)
今日のお題は──
軽量データベースエンジン SQLite
![Page 4: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/4.jpg)
SQLite とは● ファイルベースの RDBMS
● ユーザー権限とか、面倒な話は一切なし
● 小さくて軽い!
● Windows 版 sqlite3.dll (Version 3.7.13)599,419 バイト
● 高い信頼性
● バージョンアップして後悔した経験皆無(※)
(※) 個人の感想です
![Page 5: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/5.jpg)
高い信頼性● SQLiteのテストコードは4567万8000行! 本
体のコードは6万7000行http://www.publickey1.jp/blog/10/sqlite45678000_67000.html
![Page 6: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/6.jpg)
困ったら公式サイトへ● 公式サイト http://www.sqlite.org/
● 公式 Wiki http://www.sqlite.org/cvstrac/wiki
![Page 7: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/7.jpg)
SQLite のデータ型● 以下の 5 つしかない
● NULL
● INTEGER
● REAL
● TEXT
● BLOB
● Datatypes In SQLite Version 3http://www.sqlite.org/datatype3.html
![Page 8: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/8.jpg)
まずは使ってみよう● コマンドラインシェルで SQLite を体験
● コンソールから「sqlite3 データベース名」と入力
![Page 9: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/9.jpg)
例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 の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/10.jpg)
PHP から SQLite を使う● php.ini で;extension=php_pdo_sqlite.dllの行を有効にすると、PDO で SQLite が使えるようになる
![Page 11: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/11.jpg)
<?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 の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/12.jpg)
// 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 の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/13.jpg)
INSERT 時の注意● 大量の行を INSERT する場合は、必ず
トランザクションで挟むこと!
● さもないと、ものすごく時間が掛かる
![Page 14: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/14.jpg)
⼤量 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 の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/15.jpg)
// トランザクション開始$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 の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/16.jpg)
● トランザクションあり → 0.028 秒
● トランザクションなし → 7.232 秒
実際にやってみると……
INSERT 時にはトランザクションを
忘れずに!!
![Page 17: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/17.jpg)
【特集】生まれ変わる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 の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/18.jpg)
かわいいよ
SQLite
かわいいよ
![Page 19: 初心者向け SQLite の始め方](https://reader035.vdocuments.net/reader035/viewer/2022080210/55660bccd8b42a06318b4836/html5/thumbnails/19.jpg)
おしまい。
suno (すの)
suno88Inspired by @tmtms