SlideShare a Scribd company logo
1 of 19
Download to read offline
初心者向け
                                   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.db
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter 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 Bar
2|Hoge Fuga
sqlite> .q

C: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 = <<< __EOHD
CREATE 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 = <<< __EOHD
CREATE 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 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の不得意な処理のようだ。


                         ※「お詫びと訂正」が追記されています
かわいいよ
 SQLite
かわいいよ
おしまい。


                     suno (すの)
Inspired by @tmtms      suno88

More Related Content

What's hot

わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQLyoku0825
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはyoku0825
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術yoku0825
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうyoku0825
 
今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7yoku0825
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアルkwatch
 
光のMySQL 5.7
光のMySQL 5.7光のMySQL 5.7
光のMySQL 5.7yoku0825
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Makoto Haruyama
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜Michitoshi Yoshida
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリングyoku0825
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Mikiya Okuno
 
Sql world を支える技術
Sql world を支える技術Sql world を支える技術
Sql world を支える技術Oda Shinsuke
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識yoku0825
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06Mikiya Okuno
 
オープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングオープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングSho Okada
 
プロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にするプロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にするShunji Konishi
 

What's hot (20)

わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLは
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
わたしを支える技術
わたしを支える技術わたしを支える技術
わたしを支える技術
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
 
今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7今から備えるMySQL最新バージョン5.7
今から備えるMySQL最新バージョン5.7
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
 
光のMySQL 5.7
光のMySQL 5.7光のMySQL 5.7
光のMySQL 5.7
 
Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2Mysql casual fukuoa_vlo_2
Mysql casual fukuoa_vlo_2
 
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
進化したのはサーバだけじゃない!〜DBA の毎日をもっと豊かにするユーティリティのすすめ〜
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリング
 
Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2Performance Schema @ MySQL Casual #2
Performance Schema @ MySQL Casual #2
 
Sql world を支える技術
Sql world を支える技術Sql world を支える技術
Sql world を支える技術
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
 
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
 
オープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングオープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミング
 
プロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にするプロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にする
 

Similar to 初心者向け SQLite の始め方

猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクション猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクションkinme modoki
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろTakuya Tsuchida
 
Start SQL Server with Docker
Start SQL Server with DockerStart SQL Server with Docker
Start SQL Server with DockerOshitari_kochi
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?Masayuki Ozawa
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Masayuki Ozawa
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testingYuji Shimada
 
FMDBの利用方法
FMDBの利用方法FMDBの利用方法
FMDBの利用方法uske7i
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517akirahiguchi
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaTakuya Tsuchida
 
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策Akishige TAKEKOSHI
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うMasayuki Nii
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets AzureToshiya TSURU
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -chibochibo
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
PhpでMySqlを使う
PhpでMySqlを使うPhpでMySqlを使う
PhpでMySqlを使うpcod
 

Similar to 初心者向け SQLite の始め方 (20)

猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクション猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクション
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
Start SQL Server with Docker
Start SQL Server with DockerStart SQL Server with Docker
Start SQL Server with Docker
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
System2
System2System2
System2
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testing
 
FMDBの利用方法
FMDBの利用方法FMDBの利用方法
FMDBの利用方法
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
ScalaMatsuri 2016
ScalaMatsuri 2016ScalaMatsuri 2016
ScalaMatsuri 2016
 
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策
 
Cocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使うCocoa勉強会#6-SQLiteをCocoaで使う
Cocoa勉強会#6-SQLiteをCocoaで使う
 
SugarCRM meets Azure
SugarCRM meets AzureSugarCRM meets Azure
SugarCRM meets Azure
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
PhpでMySqlを使う
PhpでMySqlを使うPhpでMySqlを使う
PhpでMySqlを使う
 

More from suno88

もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかもうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかsuno88
 
NSEG のこれまでとこれから
NSEG のこれまでとこれからNSEG のこれまでとこれから
NSEG のこれまでとこれからsuno88
 
AWS で社内オンライン勉強会
AWS で社内オンライン勉強会AWS で社内オンライン勉強会
AWS で社内オンライン勉強会suno88
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月suno88
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話suno88
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化suno88
 
NSEG 勉強会 二周年に寄せて
NSEG 勉強会 二周年に寄せてNSEG 勉強会 二周年に寄せて
NSEG 勉強会 二周年に寄せてsuno88
 
続・ねえ、お父さんのお仕事ってなぁに?
続・ねえ、お父さんのお仕事ってなぁに?続・ねえ、お父さんのお仕事ってなぁに?
続・ねえ、お父さんのお仕事ってなぁに?suno88
 
ねえ、お父さんのお仕事ってなぁに?
ねえ、お父さんのお仕事ってなぁに?ねえ、お父さんのお仕事ってなぁに?
ねえ、お父さんのお仕事ってなぁに?suno88
 
Windows azure
Windows azureWindows azure
Windows azuresuno88
 
「交通勉強会 ~Trafficonf ~」発足に寄せて
「交通勉強会 ~Trafficonf ~」発足に寄せて「交通勉強会 ~Trafficonf ~」発足に寄せて
「交通勉強会 ~Trafficonf ~」発足に寄せてsuno88
 
ソフトウェアエンジニアに必要な法律・契約のお話
ソフトウェアエンジニアに必要な法律・契約のお話ソフトウェアエンジニアに必要な法律・契約のお話
ソフトウェアエンジニアに必要な法律・契約のお話suno88
 
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねてsuno88
 
山椒は小粒でぴりりと辛い
山椒は小粒でぴりりと辛い山椒は小粒でぴりりと辛い
山椒は小粒でぴりりと辛いsuno88
 
ITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せにITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せにsuno88
 

More from suno88 (16)

もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかもうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
 
NSEG のこれまでとこれから
NSEG のこれまでとこれからNSEG のこれまでとこれから
NSEG のこれまでとこれから
 
AWS で社内オンライン勉強会
AWS で社内オンライン勉強会AWS で社内オンライン勉強会
AWS で社内オンライン勉強会
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
 
Javascript で暗号化
Javascript で暗号化Javascript で暗号化
Javascript で暗号化
 
NSEG 勉強会 二周年に寄せて
NSEG 勉強会 二周年に寄せてNSEG 勉強会 二周年に寄せて
NSEG 勉強会 二周年に寄せて
 
続・ねえ、お父さんのお仕事ってなぁに?
続・ねえ、お父さんのお仕事ってなぁに?続・ねえ、お父さんのお仕事ってなぁに?
続・ねえ、お父さんのお仕事ってなぁに?
 
ねえ、お父さんのお仕事ってなぁに?
ねえ、お父さんのお仕事ってなぁに?ねえ、お父さんのお仕事ってなぁに?
ねえ、お父さんのお仕事ってなぁに?
 
Windows azure
Windows azureWindows azure
Windows azure
 
Cloud
CloudCloud
Cloud
 
「交通勉強会 ~Trafficonf ~」発足に寄せて
「交通勉強会 ~Trafficonf ~」発足に寄せて「交通勉強会 ~Trafficonf ~」発足に寄せて
「交通勉強会 ~Trafficonf ~」発足に寄せて
 
ソフトウェアエンジニアに必要な法律・契約のお話
ソフトウェアエンジニアに必要な法律・契約のお話ソフトウェアエンジニアに必要な法律・契約のお話
ソフトウェアエンジニアに必要な法律・契約のお話
 
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
 
山椒は小粒でぴりりと辛い
山椒は小粒でぴりりと辛い山椒は小粒でぴりりと辛い
山椒は小粒でぴりりと辛い
 
ITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せにITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せに
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (10)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

初心者向け SQLite の始め方

  • 1. 初心者向け SQLite の始め方 SQLite Beginners Talk suno (すの) 2012-06-23 初心者向け SQLite の始め方 - SQLite Beginners Talk Powered by LibreOffice Impress 3.5.4.2
  • 2. 自己紹介 ● 春原 宏保 (すのはら ひろやす ● プログラマー (Win32、Web) ● 長野市内の SIer 勤務 ● Delphi、PHP、C#、 C++、Java、 JavaScript...
  • 3. 今日のお題は── 軽量データベースエンジン SQLite
  • 4. SQLite とは ● ファイルベースの RDBMS ● ユーザー権限とか、面倒な話は一切なし ● 小さくて軽い! ● Windows 版 sqlite3.dll (Version 3.7.13) 599,419 バイト ● 高い信頼性 ● バージョンアップして後悔した経験皆無(※) (※) 個人の感想です
  • 5. 高い信頼性 ● SQLiteのテストコードは4567万8000行! 本 体のコードは6万7000行 http://www.publickey1.jp/blog/10/sqlite45678000_67000.html
  • 6. 困ったら公式サイトへ ● 公式サイト http://www.sqlite.org/ ● 公式 Wiki http://www.sqlite.org/cvstrac/wiki
  • 7. SQLite のデータ型 ● 以下の 5 つしかない ● NULL ● INTEGER ● REAL ● TEXT ● BLOB ● Datatypes In SQLite Version 3 http://www.sqlite.org/datatype3.html
  • 8. まずは使ってみよう ● コマンドラインシェルで SQLite を体験 ● コンソールから「sqlite3 データベース名」 と入力
  • 9. 例 C:docnsegsqlite>sqlite3 hoge.db SQLite version 3.7.13 2012-06-11 02:05:22 Enter ".help" for instructions Enter 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 Bar 2|Hoge Fuga sqlite> .q C:docnsegsqlite>
  • 10. PHP から SQLite を使う ● php.ini で ;extension=php_pdo_sqlite.dll の行を有効にすると、PDO で SQLite が 使えるようになる
  • 11. <?php // 接続 if (!$db = new PDO("sqlite:test.db")) { die("DB connection failed."); } // CREATE TABLE $sql = <<< __EOHD CREATE TABLE Test ( id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL DEFAULT '' ); __EOHD; if (!$db->query($sql)) { die("Create table failed."); }
  • 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. INSERT 時の注意 ● 大量の行を INSERT する場合は、必ず トランザクションで挟むこと! ● さもないと、ものすごく時間が掛かる
  • 14. ⼤量 INSERT の例 <?php // 接続 $db = new PDO("sqlite:trans.db"); // CREATE TABLE $sql = <<< __EOHD CREATE TABLE Test ( id INTEGER PRIMARY KEY NOT NULL, value INTEGER NOT NULL ); __EOHD; $db->query($sql); // 開始時刻 $start_time = microtime(true) * 1000; // ミリ秒
  • 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. 実際にやってみると…… ● トランザクションあり → 0.028 秒 ● トランザクションなし → 7.232 秒 INSERT 時には トランザクションを 忘れずに!!
  • 17. 【特集】生まれ変わる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の不得意な処理のようだ。 ※「お詫びと訂正」が追記されています
  • 19. おしまい。 suno (すの) Inspired by @tmtms suno88