初心者向け SQLite の始め方
Upcoming SlideShare
Loading in...5
×
 

初心者向け SQLite の始め方

on

  • 3,647 views

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

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

Statistics

Views

Total Views
3,647
Views on SlideShare
3,633
Embed Views
14

Actions

Likes
2
Downloads
5
Comments
0

1 Embed 14

https://twitter.com 14

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

初心者向け SQLite の始め方 初心者向け SQLite の始め方 Presentation Transcript

  • 初心者向け SQLite の始め方 SQLite Beginners Talk suno (すの) 2012-06-23初心者向け SQLite の始め方 - SQLite Beginners Talk Powered by LibreOffice Impress 3.5.4.2
  • 自己紹介● 春原 宏保 (すのはら ひろやす● プログラマー (Win32、Web) ● 長野市内の SIer 勤務 ● Delphi、PHP、C#、 C++、Java、 JavaScript...
  • 今日のお題は── 軽量データベースエンジン SQLite
  • SQLite とは● ファイルベースの RDBMS● ユーザー権限とか、面倒な話は一切なし● 小さくて軽い! ● Windows 版 sqlite3.dll (Version 3.7.13) 599,419 バイト● 高い信頼性 ● バージョンアップして後悔した経験皆無(※) (※) 個人の感想です
  • 高い信頼性● 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 Version 3 http://www.sqlite.org/datatype3.html
  • まずは使ってみよう● コマンドラインシェルで SQLite を体験● コンソールから「sqlite3 データベース名」 と入力
  • 例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>
  • 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 TABLE Test ( id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL DEFAULT );__EOHD;if (!$db->query($sql)) { die("Create table failed.");}
  • // 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";}
  • INSERT 時の注意● 大量の行を INSERT する場合は、必ず トランザクションで挟むこと! ● さもないと、ものすごく時間が掛かる
  • ⼤量 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; // ミリ秒
  • // トランザクション開始$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";
  • 実際にやってみると……● トランザクションあり → 0.028 秒● トランザクションなし → 7.232 秒 INSERT 時には トランザクションを 忘れずに!!
  • 【特集】生まれ変わる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の不得意な処理のようだ。 ※「お詫びと訂正」が追記されています
  • かわいいよ SQLiteかわいいよ
  • おしまい。 suno (すの)Inspired by @tmtms suno88