初心者向け                                   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 の始め方

3,808

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,808
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

初心者向け 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×