Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
初心者向け                                   SQLite の始め方                                            SQLite Beginners Talk      ...
自己紹介●    春原 宏保 (すのはら ひろやす●    プログラマー (Win32、Web)    ●   長野市内の SIer 勤務    ●   Delphi、PHP、C#、        C++、Java、        JavaSc...
今日のお題は──   軽量データベースエンジン SQLite
SQLite とは●    ファイルベースの RDBMS●    ユーザー権限とか、面倒な話は一切なし●   小さくて軽い!    ●   Windows 版 sqlite3.dll (Version 3.7.13)        599,41...
高い信頼性●    SQLiteのテストコードは4567万8000行! 本    体のコードは6万7000行    http://www.publickey1.jp/blog/10/sqlite45678000_67000.html
困ったら公式サイトへ●   公式サイト http://www.sqlite.org/●   公式 Wiki http://www.sqlite.org/cvstrac/wiki
SQLite のデータ型●    以下の 5 つしかない    ●   NULL    ●   INTEGER    ●   REAL    ●   TEXT    ●   BLOB●    Datatypes In SQLite Versio...
まずは使ってみよう●    コマンドラインシェルで SQLite を体験●    コンソールから「sqlite3 データベース名」    と入力
例C:docnsegsqlite>sqlite3 hoge.dbSQLite version 3.7.13 2012-06-11 02:05:22Enter ".help" for instructionsEnter SQL statement...
PHP から SQLite を使う●    php.ini で    ;extension=php_pdo_sqlite.dll    の行を有効にすると、PDO で SQLite が    使えるようになる
<?php// 接続if (!$db = new PDO("sqlite:test.db")) {  die("DB connection failed.");}// CREATE TABLE$sql = <<< __EOHDCREATE TA...
// INSERT$stmt = $db->prepare("INSERT INTO test(id, name) " .                     "VALUES (:id, :name)");$arg = array(:id ...
INSERT 時の注意●    大量の行を INSERT する場合は、必ず    トランザクションで挟むこと!    ●   さもないと、ものすごく時間が掛かる
⼤量 INSERT の例<?php// 接続$db = new PDO("sqlite:trans.db");// CREATE TABLE$sql = <<< __EOHDCREATE TABLE Test (   id INTEGER PR...
// トランザクション開始$db->beginTransaction();// 1,000 件 INSERT$stmt = $db->prepare("INSERT INTO test(id, value) " .               ...
実際にやってみると……●    トランザクションあり → 0.028 秒●    トランザクションなし → 7.232 秒          INSERT 時には         トランザクションを            忘れずに!!
【特集】生まれ変わるPHP - Zend Engine2、SQLiteの実力は? (8) MySQLとSQLiteの比較 -大量のデータの書込みでは?http://news.mynavi.jp/special/2004/php5/007.htm...
かわいいよ SQLiteかわいいよ
おしまい。                     suno (すの)Inspired by @tmtms      suno88
Upcoming SlideShare
Loading in …5
×

初心者向け SQLite の始め方

5,949 views

Published on

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

Published in: Technology
  • Login to see the comments

初心者向け SQLite の始め方

  1. 1. 初心者向け SQLite の始め方 SQLite Beginners Talk suno (すの) 2012-06-23初心者向け SQLite の始め方 - SQLite Beginners Talk Powered by LibreOffice Impress 3.5.4.2
  2. 2. 自己紹介● 春原 宏保 (すのはら ひろやす● プログラマー (Win32、Web) ● 長野市内の SIer 勤務 ● Delphi、PHP、C#、 C++、Java、 JavaScript...
  3. 3. 今日のお題は── 軽量データベースエンジン SQLite
  4. 4. SQLite とは● ファイルベースの RDBMS● ユーザー権限とか、面倒な話は一切なし● 小さくて軽い! ● Windows 版 sqlite3.dll (Version 3.7.13) 599,419 バイト● 高い信頼性 ● バージョンアップして後悔した経験皆無(※) (※) 個人の感想です
  5. 5. 高い信頼性● SQLiteのテストコードは4567万8000行! 本 体のコードは6万7000行 http://www.publickey1.jp/blog/10/sqlite45678000_67000.html
  6. 6. 困ったら公式サイトへ● 公式サイト http://www.sqlite.org/● 公式 Wiki http://www.sqlite.org/cvstrac/wiki
  7. 7. SQLite のデータ型● 以下の 5 つしかない ● NULL ● INTEGER ● REAL ● TEXT ● BLOB● Datatypes In SQLite Version 3 http://www.sqlite.org/datatype3.html
  8. 8. まずは使ってみよう● コマンドラインシェルで SQLite を体験● コンソールから「sqlite3 データベース名」 と入力
  9. 9. 例C:docnsegsqlite>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> .qC:docnsegsqlite>
  10. 10. PHP から SQLite を使う● php.ini で ;extension=php_pdo_sqlite.dll の行を有効にすると、PDO で SQLite が 使えるようになる
  11. 11. <?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.");}
  12. 12. // 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: $namen";}
  13. 13. INSERT 時の注意● 大量の行を INSERT する場合は、必ず トランザクションで挟むこと! ● さもないと、ものすごく時間が掛かる
  14. 14. ⼤量 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; // ミリ秒
  15. 15. // トランザクション開始$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";
  16. 16. 実際にやってみると……● トランザクションあり → 0.028 秒● トランザクションなし → 7.232 秒 INSERT 時には トランザクションを 忘れずに!!
  17. 17. 【特集】生まれ変わるPHP - Zend Engine2、SQLiteの実力は? (8) MySQLとSQLiteの比較 -大量のデータの書込みでは?http://news.mynavi.jp/special/2004/php5/007.html このスクリプトは、両者とも全く同じく1000件の データを連続して挿入する。実行結果は、予想外に 圧倒的な大差がついた。 (SQLite = 16.4 秒、MySQL = 0.4 秒) さすがはMySQLといったところだが、SQLiteの16秒は ちょっとかかりすぎだろう。どうやら大量データの連続 挿入はSQLiteの不得意な処理のようだ。 ※「お詫びと訂正」が追記されています
  18. 18. かわいいよ SQLiteかわいいよ
  19. 19. おしまい。 suno (すの)Inspired by @tmtms suno88

×