ラベル データベース の投稿を表示しています。 すべての投稿を表示
ラベル データベース の投稿を表示しています。 すべての投稿を表示
2014/02/27

データベース初心者がSQLを極めるためのオススメ書籍6冊

初心者向け

マンガでわかるデータベース
マンガでわかるデータベース

最初の取っ掛かりとして。データベースの基本概念をマンガでわかりやすく解説してあります。
極めるほどのやる気がない人もマンガで概要を知っておくといいかも。
CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作

概念がわかったら次はDBエンジニアが書いたデータベース操作に特化した入門書がオススメ!
各種データベースの違いや初心者がつまづきやすいところが解説されているので読んでおきたい。

中級者向け

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
達人に学ぶ SQL徹底指南書

実践的なSQLのケーススタディとリレーショナルデータベースの世界の解説をしている本。
もっと効率的なSQLやSQL自体に興味を持ってしまったあなたへ。
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

DBエンジニアを目指す人などがDB設計の考え方と実践ノウハウを身につけるための本。
他人が作ったテーブルを操作する段階から抜け出すときには必読でしょう。

上級者向け

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

SQLの達人になりたい人向け。DBエンジニアの演習問題では最高峰レベルの本。
全部解けたらSQLを極めたと言っても過言ではないのでは?
プログラマのためのSQL 第4版
プログラマのためのSQL 第4版

SQLの聖書。
「達人に学ぶ SQL徹底指南書」が副読本で、「SQLパズル」が演習本なら本書は教科書と言える。

さいごに

「SQL ゼロからはじめるデータベース操作」、「達人に学ぶ SQL徹底指南書」、
「達人に学ぶDB設計 徹底指南書」の著者で、
「SQLパズル 第2版」、「プログラマのためのSQL 第4版」の訳者でもあるミック氏の
リレーショナル・データベースの世界も読んでおきたい。

おまけ

この記事の内容は Naver まとめで 4000弱 の PV で 500円くらいの収益(約一年半で!)だったので
ブログに書けば 4000PV なら AdSense と Amazon アフィリエイトで
もう少し稼げるんじゃないかなぁとか思ったのでブログに書くことにしました。
Naver まとめにコンテンツをあげる義理もないですからね。
2013/12/30

2013年に @wada811 が読んだ技術書まとめ

2013年も終わりに近づいているので@wada811が読んだ技術書を振り返ってみようかと思います。
2012年はこちら→2012年に @wada811 が読んだ技術書まとめ | DevAchieve(約40冊)

2013/03/02 [書評]正規表現辞典 | DevAchieve

正規表現辞典は本当に良い。
通読しても良し、かいつまんで読んでも良し、辞書としても良しの三拍子揃った素晴らしい書籍です。
正規表現が使えれば大抵のテキスト処理は簡単にできるのでエンジニアもそうでない人も読んだほうが良いです。
ついでに僕の Amazon リンクから買うとアフィリエイト料が入ってなお良しです。
(最近、アフィリエイト料率が下がって全然儲からないです。つらい。)

2013/05/31 [書評]モバイルデザインパターン | DevAchieve

デザイン系の書籍は [書評]iPhoneアプリ設計の極意 ―思わずタップしたくなるアプリのデザイン に続いて2冊目。
会社にあったので読んでみた。内容的にはiPhoneアプリ設計の極意とそんなに変わらないかも。
それぞれのデザインパターンについて簡潔な説明でまとめた付録がわかりやすかった。どちらか一冊で良さそう。
もう一冊読むなら一味変えてインタフェースデザインの心理学を読んだほうが得るものありそう。
あと、ユーザビリティで有名っぽいニールセン博士のモバイル・ユーザビリティも微妙に気になってる。
へいしゃー!買ってくれー!間に合わなくなっても知らんぞー!!

2013/08/25 [書評]HTTPの教科書 | DevAchieve

概要を知るには良い感じの本です。挿絵とか文体とか読みやすくてわかりやすかったです。
Web 関連の技術や必要な知識についてHTTPの教科書のテイストで解説している本があったら
Web 系プログラマの新人教育に使えそうな気がします。
Web への攻撃技術という章でセキュリティ関連の解説もわかりやすく行われているので大変良いです。
(引越に際して売ろうかと思っていたけど取っておこうかな)

2013/08/29 [書評]達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ | DevAchieve

データベース初心者がSQLを極めるためのオススメ書籍6冊の本のうち、読んだ本3冊目です。
ちなみに達人に学ぶ SQL徹底指南書は読んでません。
結構 SQL は書けるようになって複雑なのとか行けるようになったから
そこまで切羽詰まってないので達人に学ぶ SQL徹底指南書はいいかなぁって感じです。
それより DB 設計とかパフォーマンスチューニング的な所を身につけていきたいです。
DB 設計については達人に学ぶDB設計 徹底指南書が良かったので何とかなりましたが、
パフォーマンスチューニングはどこから知識を得ればいいんでしょうね?
数十万件規模のテーブルをジョインジョイントキィするとサービスをKOしてしまって
開発第二ラウンドが発生してしまうので勘弁願いたいんですよねぇ。

1年で書籍4冊の書評を書いた!

2012年は約40冊読んで25冊くらい書評書いたのに今年少なすぎじゃないか?アカン…。
まぁその分DevCameraの開発にかなりの時間を割いたし、
書籍を読む以上に Androider としての技術力が上がったから良いかな?
Android の NDK とか OpenGL, OpenCV のような特殊な事以外だったら
書籍無くてもリファレンスとか見てだいたい実装できそうな気がする。
まぁアニメーションとか UX 的な気持ちよさみたいな部分の実装能力はまだまだだけど。

読んだけど書評を書いていないのは以下の7冊かな。
【改訂新版】 Linuxコマンド ポケットリファレンス
良かった。手元においておきたい感じだけど
普段使うコマンドってそんなに変わらないから使用機会が少ないのが難点。
しかも家に置いてあるという。会社だったらググって解決なので使い所が難しい。
入門UNIXシェルプログラミング
まだ読み途中で積ん読になってる…。
興味はあるし、ちょっとしたシェルスクリプトで手間が省けたら嬉しいから学びたいけど
いかんせん使用機会の少なさがモチベーションの低さになってしまう。
入門 Androidアプリケーションテスト
UnitTest やろうというのが2013年の目標だったので買ってみた。
しかし、開発したアプリがカメラ機能がメインなのでテストがやりにくくて全然やってない。
仕事でカメラとか端末機能を使わないアプリでは UnitTest をやれたので良かったと思う。
Smashing Android UI レスポンシブUIとデザインパターン
デザイン系の書籍3冊目で、珍しく Android をテーマにしたデザインパターン本です。
凄く良い本だったし、ちゃんと書きます。放置しててごめんなさい…!
書きました→[書評]Smashing Android UI レスポンシブUIとデザインパターン | DevAchieve
OpenGL ES 2.0 Androidグラフィックスプログラミング
OpenGL ES を Android から呼び出す方法を解説している本です。コレも記事書きます…!
年をまたいでしまう…!ごめんなさい…!
書きました→[書評]OpenGL ES 2.0 Androidグラフィックスプログラミング | DevAchieve
Effective Java 第2版
ピアソン桐原社の技術書などが在庫限りという事で入手困難に陥る前に買いました。
記事書きます…!読んだらすぐに書評書かないとダメだ…!
書きました→[書評]Effective Java 第2版 | DevAchieve
プレゼンテーションZen 第2版
こちらもピアソン桐原社の書籍で、会社にあったので読みました。
4月になる前にこのへんの書籍の書評を書こう…!

Android も良いけど他のことももっと色々出来るようになっていこう!
そしてちゃんと書評記事を書こう!速さが足りない!
2013/08/29

[書評]達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
著者 : ミック
翔泳社
発売日 : 2012-03-16
ブクログでレビューを見る»
DB設計の基礎知識と実践的なノウハウをわかりやすく解説した本。
SQLを使うだけでなく、テーブル設計などを始めたら読んでおきたい。

第1章のタイトル「データベースを制するものはシステムを制す」は
システムエンジニアの金言と言っても過言ではないでしょう。
DB設計がダメだとシステム開発の難易度が跳ね上がるので
DB設計者には本書の内容を身につけておいて欲しいですね。
翔泳社刊行物Q&A:達人に学ぶDB設計 徹底指南書 正誤表

データベース初心者がSQLを極めるためのオススメ書籍6冊 | DevAchieveのうちの1冊です。
達人に学ぶ SQL徹底指南書はまだ読んでいないですが、次あたりに読もうと思います。

さて、達人に学ぶDB設計 徹底指南書の内容ですが、まずは目次を見ましょう。
第1章 データベースを制する者はシステムを制す
第2章 論理設計と物理設計
第3章 論理設計と正規化 ~なぜテーブルは分割する必要があるのか?
第4章 ER図 ~複数のテーブルの関係を表現する
第5章 論理設計とパフォーマンス ~正規化の欠点と非正規化
第6章 データベースとパフォーマンス
第7章 論理設計のバッドノウハウ
第8章 論理設計のグレーノウハウ
第9章 一歩進んだ論理設計 ~SQLで木構造を扱う

第1章はDB設計の重要性と3層スキーマ(外部スキーマ、概念スキーマ、内部スキーマ)について解説しています。
概念スキーマの大切さについて論じられていて、わかるわーってなりました。変更時に残念な事になるからね。

第2章は論理設計と物理設計の流れ、考えるべきことについて解説しています。
バックアップとリカバリはほとんどやったことがないので難しそうだなぁ(そして責任重大だなぁ)と思いました。
フルバックアップの欠点としてサービスの停止が必要とありましたが、
停止しなくても MySQL で InnoDB ならmysqldump --single-transaction
テーブルをロックすること無くバックアップを取ることができるので違うのかな?と思いました。
余談ですが、初めてフルバックアップするときはサービスは停止できないし、
テーブルがロックされたら参照/更新できなくなってとんでもないことになるしで
マニュアルやエキスパートのためのMySQL[運用+管理]トラブルシューティングガイドを読んで
mysqldump --single-transactionで良いんだよなとドキドキしながら実行したことを思い出します。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム
更に余談ですが、あの本って漢(オトコ)のコンピュータ道の中の人が書いた本だったんですね。

第3章と第4章は正規化とER図ということで、設計にあたっての基礎知識を解説しています。
このへん、1冊の書籍としてまとまっているのはありがたいですね。
DB設計の基礎知識を身につけさせたかったら、コレ1冊渡してあげればなんとかなりそうです。

第5章は正規化とパフォーマンスのトレードオフ関係について解説しています。
論理設計は大事だけど、論理設計には物理設計の知識が必要ってことでした。
どんなに綺麗に正規化しても物理設計から離れてはいけないのだ、と。
正規化しすぎると JOIN が増えてパフォーマンスに問題が出るからバランスとるのが難しいですね。

第6章はデータベースのパフォーマンスについて解説しています。
B-tree インデックスは名前だけしか知らなかったので勉強になりました。
統計情報は意識したことないし、InnoDB なら基本的に意識しなくて良いみたい。
漢(オトコ)のコンピュータ道: 大人のためのInnoDBテーブルとの正しい付き合い方。

第7章と第8章は論理設計のバッドノウハウとグレーノウハウについて解説しています。
自分で体験できる論理設計の場面は限られているのでこのようなケーススタディは勉強になります。
そんなに規模が大きくないとバッドノウハウでも何とかなっちゃったりするので
何がバッドかどうかというのを知っておくのは良いですね。

第9章は応用編でリレーショナルデータベースが苦手とされてきた木構造について解説しています。
隣接リストモデルは子が親の ID などを持つことになるかと思いますが、 SQL がかなり複雑になりますね。
葉(leaf)から根(root)を探そうと思うと
自己結合するクエリをループで複数回実行することになって微妙だったことがありました。
入れ子集合モデルや入れ子区間モデル、経路列挙モデルが紹介されていますが、どれも大変そうなイメージです。
まず、これらのモデルを知らない人がカラムの意図を理解することができなそうで大変そうだと思いました。
入れ子区間モデルとか良さそうでしたけど親や兄弟を探すのとかどうやるんでしょうね?
あと、例えば Twitter のリプライのツリーみたいに必ずしも親を持つわけではない場合に
親がいるかどうかの判定がめんどくさそうなのと、その値のマッピングが難しそうだと思いました。
やっぱりそういうのは隣接リストモデルの方がいいんでしょうね。Twitter のテーブル定義が見てみたいですね。

著者のミックさんの書いた解説が Web 上にあるので気になったら読んでみると良いと思います。
SQLで木と階層構造のデータを扱う(1)―― 入れ子集合モデル
SQLで木と階層構造のデータを扱う(2)―― 経路列挙モデル
SQLで木と階層構造のデータを扱う(3)――入れ子区間モデル
他にも色々解説を書いているので SQL ある程度出来る人は読むと勉強になると思います。
リレーショナル・データベースの世界

おわりに

感想だけで結構な文量になるあたり、オススメだと思います。学ぶことが多かった1冊です。
2012/11/25

[SQLearning][SQLite]テーブルの変更と削除

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」の第4回です。

前回: [SQLearning][SQLite]データ型と制約の指定 | DevAchieve
第3回は「テーブルの変更と削除」についてです。

カラムの追加

以下の CREATE 文で生成されるテーブルを元に解説していきます。
CREATE TABLE products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL UNIQUE,
    description TEXT    NULL,
    price       INTEGER NOT NULL,
    discount    INTEGER NOT NULL DEFAULT 0,
    reg_date    TEXT    NOT NULL DEFAULT CURRENT_DATE
);
このテーブルにカラムを追加するには以下のように記述します。
ALTER TABLE <テーブル名> ADD <カラム名> <型> <制約>;
ALTER TABLE products
    ADD bar_code TEXT NOT NULL DEFAULT '000000000000000';
カラムは常に末尾に追加されます。
CREATE TABLE 構文とは異なり、以下のような制約があります。
  • 追加されるカラムは PRIMARY KEY 制約, UNIQUE 制約を持つことができません。
  • 追加されるカラムは デフォルト値に固定値以外の値(CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, 式)を持つことができません。
  • 追加されるカラムに NOT NULL 制約が指定されている場合は NULL 以外のデフォルト値が設定されている必要があります。
  • 外部キー制約が有効で、REFERENCES 句とともにカラムが追加された場合、追加されたカラムはデフォルト値に NULL を持たなくてはなりません。
※ CHECK 制約を追加する際は既存の列に対してテストされないことに注意してください。
これは CHECK 制約に違反するデータを含むテーブルになりうることを意味します。
SQLite の今後のバージョンでは追加される CHECK 制約を検証するように変更されるかもしれません。

カラムが追加されたデータベースは SQLite Ver.3.1.3 以前のバージョンで読めなくなります。

テーブル名の変更

テーブル名を変更するには以下のように記述します。
ALTER TABLE <テーブル名> RENAME TO <新しいテーブル名>;
テーブル名を変更した際に外部キー制約が有効ならば
REFERENCES 句に指定されていたテーブル名は新しいテーブル名に自動的にリネームされます。

SQLite Query Language: ALTER TABLE

テーブルの削除

テーブルを削除するには以下のように記述します。
DROP TABLE <テーブル名>;
テーブルに関連付けられたすべてのインデックスとトリガも削除されます。
DROP TABLE IF EXISTS <テーブル名>;
IF EXISTS を記述すれば存在しないテーブルの削除を試みることによるエラーを防ぐことができます。

次回

次回は「SELECT文の基礎」を予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/11/24

[SQLearning][MySQL]テーブルの変更・削除

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」の第4回です。
前回: [SQLearning][MySQL]データ型・制約の指定 | DevAchieve
第4回は「テーブルの変更・削除」についてです。

カラムの追加

前回同様、以下のテーブルを元に解説していきます。
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| name        | varchar(255) | NO   | UNI | NULL    |                |
| description | text         | YES  |     | NULL    |                |
| price       | int(11)      | NO   |     | NULL    |                |
| tax_free    | tinyint(1)   | NO   |     | 0       |                |
| reg_date    | datetime     | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
このテーブルにカラムを追加するには以下のように記述します。
ALTER TABLE <テーブル名> ADD <追加するカラム名> <型> <制約>;
ALTER TABLE products
    ADD bar_code varchar(255) NOT NULL DEFAULT '0-000000-000000' AFTER tax_free;
カラムの追加位置は AFTER で指定します。未指定の場合は末尾に追加されます。
先頭に追加する場合は以下のように FIRST で指定します。
ALTER TABLE products
    ADD products_type_id int(11) NOT NULL DEFAULT 0 COMMENT '商品タイプ' FIRST;
また、複数追加する場合は以下のようにカンマ区切りで記述します。
ALTER TABLE products
    ADD receipt_name varchar(255) NOT NULL COMMENT 'レシート表示名' AFTER name,
    ADD url varchar(255) NULL DEFAULT NULL COMMENT '商品ページURL' AFTER description;

カラムの変更

カラム名、カラムの型や制約を変更する場合は以下のように記述します。
ALTER TABLE <テーブル名> CHANGE <古いカラム名> <新しいカラム名> <型> <制約>;
ALTER TABLE products
    CHANGE url homepage_url varchar(255) NULL DEFAULT NULL COMMENT '商品ホームページURL';

カラムの型や制約だけを変更したい場合は以下のように記述します。
ALTER TABLE <テーブル名> MODIFY <変更するカラム名> <型> <制約>;
ALTER TABLE products
    MODIFY bar_code varchar(13) NOT NULL DEFAULT '0000000000000' AFTER id;
AFTER でカラムの順番も変更することもできます。
Oracleの独自実装の互換性対応のため実装されているようです。

カラムのデフォルト値を削除したい場合は以下のように記述します。
ALTER TABLE <テーブル名> ALTER <カラム名> DROP DEFAULT;
ALTER TABLE products
    ALTER bar_code DROP DEFAULT;

カラムのデフォルト値を設定したい場合は以下のように記述します。
ALTER TABLE <テーブル名> ALTER <カラム名> SET DEFAULT <デフォルト値>;
ALTER TABLE products
    ALTER bar_code SET DEFAULT '0000000000000';

カラムの削除

カラムを削除したい場合は以下のように記述します。
ALTER TABLE <テーブル名> DROP <削除するカラム名>;
ALTER TABLE products
    DROP homepage_url;

ADD, ALTER, CHANGE, DROP はカンマで区切ることによって一度に複数の変更を実行することができます。
ALTER TABLE では元テーブルの一時コピーを作成するため一度に変更を実行したほうが良いです。
ほとんどの場合、 ALTER TABLE は元テーブルのテンポラリ コピーを作成する事で起動します。
そのコピー上で変更が行われ、その後元テーブルが削除されて新しいテーブルがリネームされます。
ALTER TABLE が実行している間、他のクライアントが元テーブルを読む事ができます。
新しいテーブルの準備ができるまで更新と書き込みは止められ、
その後更新に失敗する事なく新しいテーブルに自動的にリダイレクトされます。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文

AUTO_INCREMENT の値の変更

以下のように記述します。
ALTER TABLE <テーブル名> AUTO_INCREMENT = <値>;
ALTER TABLE products AUTO_INCREMENT = 100;
AUTO_INCREMENT カラム内の最高値以下の値が指定された場合、
MyISAMでは最高値+1にリセットされますが、InnoDBではエラーも出ず、変更もされません。

おまけ: AUTO_INCREMENT の振り直し

挿入と削除を繰り返していると id が歯抜け状態になるので振り直したい時に使えます。
データ不整合を起こす可能性があるのでよく検討してから使用してください。
ALTER TABLE products
    CHANGE id renamed_id int(11);
ALTER TABLE products
    ADD id int(11) NOT NULL AUTO_INCREMENT FIRST,
    ADD PRIMARY KEY(id),
    DROP renamed_id;
単純に id を DROP してから追加しないのは先に DROP すると順序が変わる可能性があるからです。

テーブル名の変更

ALTER TABLE <テーブル名> RENAME TO <新しいテーブル名>
RENAME TABLE <テーブル名> TO <新しいテーブル名>
標準SQLでテーブル名の変更が定義されていないので独自実装で方法が幾つかあります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.19 RENAME TABLE 構文

データベースエンジンの変更

ALTER TABLE <テーブル名> ENGINE = <エンジン名>;
ALTER TABLE products ENGINE = InnoDB;

デフォルト文字セットの変更

ALTER TABLE <テーブル名> DEFAULT CHARSET = <文字コード名>;

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文

テーブルの削除

DROP TABLE [IF EXISTS] <テーブル名>;
DROP TABLE products;
DROP TABLE IF EXISTS products;
IF EXISTS を記述すれば存在しないテーブルの削除を試みることによるエラーを防ぐことができます。

次回

次回は「SELECT文の基礎」について予定しています。
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/26

[SQLearning][SQLite]データ型と制約の指定

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」の第3回です。

前回: [SQLearning][SQLite]テーブルの作成・確認・削除 | DevAchieve
第3回は「データ型と制約の指定」についてです。

データ型の指定

以下の CREATE 文を例にデータ型と制約の指定について解説します。
CREATE TABLE IF NOT EXISTS products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL UNIQUE,
    description TEXT    NULL,
    price       INTEGER NOT NULL CHECK(price > 0),
    tax_free    INTEGER NOT NULL DEFAULT 0 CHECK(tax_free IN (0, 1)),
    reg_date    TEXT    NOT NULL DEFAULT CURRENT_DATE
);
SQLite では動的型付けシステムを使用していて、データ型はカラムではなく値自体に関連付けられます。
ストレージクラスとして定義されていますが、これらはほぼデータ型と同じと考えることができます。
NULL
NULL値
INTEGER
符号付き整数。桁数によって1, 2, 3, 4, 6 バイトで保存される。
REAL
浮動小数点数。8バイトで保存される。
TEXT
文字列。データベースのエンコーディング(UTF-8, UTF-16BE もしくは UTF-16LE)で保存される。
BLOB
バイナリデータ(Binary Large OBject)。入力データがそのまま保存される。

Boolean
真偽値を格納する Boolean 型はありません。かわりに INTEGER 型の 0(false), 1(true) として保存します。
Date 型と Time 型
Date 型, Time 型, DateTime 型はありません。
かわりに組み込みのDate And Time Functionsが INTEGER, TEXT, REAL のいずれかとして保存します。
INTEGER: 1970-01-01 00:00:00 UTC からの秒数である Unix Time
TEXT: ISO8601 表記の文字列("YYYY-MM-DD HH:MM:SS.SSS")
REAL: 先発グレゴリオ暦にしたがった紀元前4714年11月24日、
グリニッジ標準時における正午からのユリウス日数(関連: ユリウス通日)
REAL はちょっと意味がわかりませんね。

また、SQLite では他の RDBMS との互換性のために Type Affinity (型の類似性)という概念が導入されています。
  • TEXT: ストレージクラスの NULL, BLOB, TEXT のすべてのデータを含みます。
  • NUMERIC: ストレージクラスの5つすべてを含みます。データは変換される可能性があります。
  • INTEGER: NUMERIC とほぼ同じ振る舞いをします。違いは CAST 方法のみです。
  • REAL: NUMERIC とほぼ同じ振る舞いをします。違いは浮動少数表現を強制する点です。
  • NONE: 他のストレージクラスへの変換をしません。
Datatypes In SQLite Version 3

制約の指定

NULL と NOT NULL
NULL は NULL値を許容し、NOT NULL は NULL値 を入れることができなくなります。
DEFAULT
デフォルト値を設定することができます。
INSERT時の日時をデフォルト値にすることのできる以下のキーワードを設定することもできます。
CURRENT_TIMEHH:MM:SS 形式
CURRENT_DATEYYYY-MM-DD 形式
CURRENT_TIMESTAMPYYYY-MM-DD HH:MM:SS 形式
PRIMARY KEY
主キーを設定することができます。INTEGER と組み合わせることで AUTOINCREMENT を実現できます。
しかし、その場合はデータ削除に再び同じ値が入ります。
AUTOINCREMENT
明示的に指定するとデータ削除後は削除した値にはならず次に大きい値が入ります。
UNIQUE
指定すると unique(一意な)値のみを受け入れます。
INSERT または UPDATE 時に既存の値と重複した値を指定するとエラーになります。
NULL を許容する場合、それぞれの NULL値は異なる値として扱われます。
CHECK(条件式)
条件式を満たす値のみを許容します。条件式にサブクエリを含めることはできません。
INSERT または UPDATE 時に条件式を満たさない値を指定するとエラーになります。
ver. 3.3.0 からサポートされました。ver. 3.3.0 以前では指定しても無視されます。

SQLite Query Language: CREATE TABLE

次回

次回は「テーブルの変更」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/05

[SQLearning][MySQL]データ型・制約の指定

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」の第3回です。
前回: [SQLearning][MySQL]テーブルの作成・確認・削除
第3回は「データ型・制約の指定」の指定についてです。

データ型の指定

以下の CREATE 文を例にデータ型と制約の指定について解説します。
CREATE TABLE products (
    id          int(11)      NOT NULL AUTO_INCREMENT COMMENT '商品ID',
    name        varchar(255) NOT NULL UNIQUE         COMMENT '商品名',
    description text                                 COMMENT '商品の説明',
    price       int(11)      NOT NULL                COMMENT '商品の値段',
    tax_free    tinyint(1)   NOT NULL DEFAULT 0      COMMENT '非課税フラグ',
    reg_date    datetime     NOT NULL                COMMENT '登録日',
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT '商品テーブル';
int(11)
数値型です。カッコは表示幅です。値の範囲に影響を与えるものではありません。
ZEROFILL を続いて指定することによってスペースで調整される表示幅を 0 で埋めることができます。
値の範囲は -2147483648 ~ 2147483647 ですが、UNSIGNED をつければ 0 ~ 4294967295 になります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.2 数値タイプ
varchar
可変長の文字列型です。カッコは文字数です。(※4.1以前まではバイト数でした)
MySQL :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 10.4.1 The CHAR and VARCHAR Types
(Before MySQL 4.1, the length is interpreted as number of bytes.)
MySQL 5.0.3以前は varchar は 255 バイト まででした。それ以降のバージョンでは 65535 バイト、
メタデータを除き 65532 バイト まで入れることができます。
MySQL :: MySQL 5.0 Reference Manual :: 11.1.6.1 The CHAR and VARCHAR Types
The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
文字コードが utf8 の場合は1文字3バイトなのでカッコに指定できるのは(65532/3=)21844くらいまでです。(*1)
それ以上の数を指定すると MySQLが自動的に mediumtext などに変換します。
(*1)メタデータの領域があるのか僕の環境では varchar(21835) までしか varchar として作成できませんでした。
text
可変長の文字列型です。varchar とは異なりデフォルト値を設定できません。
用途としては varchar とほとんど同じですが varchar がテーブルにインラインに格納されているのに対して
text は文字列を別ファイルとして持ち、カラムはファイルへのポインタを持っているようです。
この件については複雑な問題ですが以下の投稿によくまとまっています。
Takahiko HORIUCHI - Google+ - RDBMS に MySQL を採用したシステムで、VARCHAR の代わりに TEXT…
varchar(10000)とかで指定するくらいなら text にした方がパフォーマンス的に良いようです。
tinyint(1)
MySQL によって BOOL / BOOLEAN が内部変換された数値型です。
主にフラグ系の値を格納するのに使います。値の範囲は -127 ~ 128 です。
datetime
日時を格納する日付型です。'YYYY-MM-DD HH:MM:SS'形式で日時を保存します。

データ型は詳しく書くとリファレンスマニュアル並みの分量になるのでココでは簡単に紹介するだけに留めます。
詳しく知りたい方はMySQL :: MySQL 5.1 リファレンスマニュアル :: 10 データタイプを読むといいでしょう。

カラムの制約の指定

NULL と NOT NULL
description は NULL を許容するので NULL を指定していますが、
他のカラムは NULL を入れたくないので NOT NULL を指定します。
DEFAULT
デフォルト値を指定したい場合は DEFAULT [指定したい値] と記述します。
discount カラムはフラグを 0, 1 で管理したいのでデフォルト false で 0 を指定する、などのように使います。
AUTO_INCREMENT
id などのように自動で連番を振りたい場合は AUTO_INCREMENT を指定します。
UNIQUE
すべての値が一意でなければならない制限を指定します。
INSERT または UPDATE 時に既存の値と同じ値になる場合はエラーが発生します。
NULL を許容する場合、すべての NULL値は異なる値として扱われます。
COMMENT
カラムに対するコメントを記述することができます。
SQL 文のコメントとは異なり、SHOW CREATE TABLE 文で CREATE TABLE 文を表示した時にも表示されます。
phpMyAdmin などを使用する場合はコメントが表示されるのでフラグ系の各値の意味を記述しておくと便利です。

テーブルの制約の指定

PRIMARY KEY ( [カラム名] )
このテーブルの主キーを設定することができます。

テーブルの設定

ENGINE
データベースのストレージエンジンを指定することができます。
InnoDB と MyISAM が有名ですが 5.5 では InnoDB がデフォルトなようです。
以下のクエリでストレージエンジンの種類を確認すすることができます。
mysql> SHOW ENGINES;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.13 SHOW ENGINES 構文
また、以下のクエリで各テーブルが使用しているストレージエンジンを確認することができます。
mysql> SHOW TABLE STATUS;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.27 SHOW TABLE STATUS 構文
DEFAULT CHARSET
使用する文字セットを指定することができます。日本語を扱うなら utf8(utf8_general_ci)が一般的です。
以下のクエリでサポートしている文字セットを確認することができます。
mysql> SHOW CHARACTER SET;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.2 SHOW CHARACTER SET 構文
実行結果
MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.10 MySQL でサポートされるキャラクタセットと照合順序
MySQL :: MySQL 5.5 Reference Manual :: 10.1.14 Character Sets and Collations That MySQL Supports
COLLATE
照合順序を設定することができます。文字列を比較する際に順位を決める設定です。
DEFAULT CHARSET が utf8 の場合、省略すると utf8_general_ci が設定されます。
ちなみに utf8_general_ci の ci は case-insensitive の略で、大文字小文字を区別しないという意味なので
大文字小文字を区別したい場合は utf8_bin などを指定します。
以下のようなクエリで照合順序の一覧を表示します。
mysql> SHOW COLLATION like 'utf8%';
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.3 SHOW COLLATION 構文
COMMENT
テーブルに対してもコメントを記述することができます。

次回

次回は「テーブルの変更」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/04

[SQLearning][SQLite]テーブルの作成・確認・削除

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」の第2回です。

前回: [SQLearning][SQLite]ログインとデータベースの作成・削除 | DevAchieve
第2回は「テーブルの作成・確認・削除」についてです。

テーブルの作成

CREATE TABLE products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL,
    description TEXT    NULL,
    price       INTEGER NOT NULL,
    discount    INTEGER NOT NULL DEFAULT 0,
    reg_date    TEXT    NOT NULL
);
すでにテーブルが存在する場合はエラーになりますが IF NOT EXISTS と書くことでエラーを防ぐことができます。
CREATE TABLE IF NOT EXISTS products (
    id          INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name        TEXT    NOT NULL,
    description TEXT    NULL,
    price       INTEGER NOT NULL,
    discount    INTEGER NOT NULL DEFAULT 0,
    reg_date    TEXT    NOT NULL
);
SQLite Query Language: CREATE TABLE

テーブルの確認

.tables
テーブルの一覧を表示します。
sqlite> .tables
.schema
CREATE TABLE 文を表示します。
sqlite> .schema products

テーブルの削除

DROP TABLE products;
すでにテーブルが存在する場合はエラーになりますが IF EXISTS と書くことでエラーを防ぐことができます。
DROP TABLE IF EXISTS products;

次回

次回は「データ型・制約の指定」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/10/01

[SQLearning][MySQL]テーブルの作成・確認・削除

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」の第2回です。
第1回: [SQLearning][MySQL]ログインとデータベースの作成・削除
第2回の今回は「テーブルの作成・確認・削除」についてです。

データベースの選択

第1回で作成した shop データベースにテーブルを作成するわけですが、
まずはテーブルを作成するクエリを投げる前にデータベースを選択しなければいけません。
データベースを選択していないとERROR 1046 (3D000): No database selectedというエラーが発生します。
mysql> USE shop;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.3.3 USE 構文

テーブルの作成

CREATE TABLE Shohin (
    shohin_id     CHAR(4)       NOT NULL,
    shohin_mei    VARCHAR(100)  NOT NULL,
    shohin_bunrui VARCHAR(32)   NOT NULL,
    hanbai_tanka  INTEGER       ,
    shiire_tanka  INTEGER       ,
    torokubi      DATE          ,
    PRIMARY KEY (shohin_id)
);
すでにテーブルが存在する場合はエラーになりますが IF NOT EXISTS と書くことでエラーを防ぐことができます。
CREATE IF NOT EXISTS TABLE Shohin (
    shohin_id     CHAR(4)       NOT NULL,
    shohin_mei    VARCHAR(100)  NOT NULL,
    shohin_bunrui VARCHAR(32)   NOT NULL,
    hanbai_tanka  INTEGER       ,
    shiire_tanka  INTEGER       ,
    torokubi      DATE          ,
    PRIMARY KEY (shohin_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.8 CREATE TABLE 構文

テーブルの確認

テーブル情報はいくつかのクエリで確認することができます。
SHOW TABLES 構文
データベースのテーブル一覧を表示します。
mysql> SHOW TABLES;
+----------------+
| Tables_in_shop |
+----------------+
| Shohin         |
+----------------+
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.28 SHOW TABLES 構文
DESCRIBE 構文 または SHOW COLUMNS 構文
データ型や制約などを表示します。DESCRIBE 構文は SHOW COLUMNS 構文 のショートカットです。
mysql> DESCRIBE Shohin;
または
mysql> DESC Shohin;
または
mysql> SHOW COLUMNS FROM Shohin;
+---------------+--------------+------+-----+---------+-------+
| Field         | Type         | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| shohin_id     | char(4)      | NO   | PRI | NULL    |       |
| shohin_mei    | varchar(100) | NO   |     | NULL    |       |
| shohin_bunrui | varchar(32)  | NO   |     | NULL    |       |
| hanbai_tanka  | int(11)      | YES  |     | NULL    |       |
| shiire_tanka  | int(11)      | YES  |     | NULL    |       |
| torokubi      | date         | YES  |     | NULL    |       |
+---------------+--------------+------+-----+---------+-------+
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.3.1 DESCRIBE 構文
SHOW TABLE STATUS 構文
テーブルに関するさらに詳しい情報を表示します。
mysql> SHOW TABLE STATUS;
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name   | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Shohin | InnoDB |      10 | Compact    |    0 |              0 |       16384 |               0 |            0 |   9437184 |           NULL | 2012-09-29 22:44:57 | NULL        | NULL       | utf8_general_ci |     NULL |                |         |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.27 SHOW TABLE STATUS 構文
SHOW CREATE TABLE 構文
CREATE 文を表示します。
mysql> SHOW CREATE TABLE Shohin;
CREATE TABLE `Shohin` (
  `shohin_id` char(4) NOT NULL,
  `shohin_mei` varchar(100) NOT NULL,
  `shohin_bunrui` varchar(32) NOT NULL,
  `hanbai_tanka` int(11) DEFAULT NULL,
  `shiire_tanka` int(11) DEFAULT NULL,
  `torokubi` date DEFAULT NULL,
  PRIMARY KEY (`shohin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
MySQL によって自動的に変換されていることがわかります。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.4.9 SHOW CREATE TABLE 構文

テーブルの削除

mysql> DROP TABLE Shohin;
テーブルが存在していなかった場合はエラーになりますが IF EXISTS と書くことでエラーを防ぐことができます。
mysql> DROP TABLE IF EXISTS Shohin;
MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.14 DROP TABLE 構文

次回

次回は「データ型・制約の指定」についてを予定しています。
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/09/30

[SQLearning][SQLite]ログインとデータベースの作成・削除

SQL ゼロからはじめるデータベース操作を教材にしてSQLiteを学ぶ
SQL学習連載「SQLearning」を始めます。

準備は以下の記事で済んでいると想定します。
SQL ゼロからはじめるデータベース操作で SQLite を学ぶ | DevAchieve

SQLite コンソールを開く

ターミナルで以下のコマンドを実行します。
sqlite3
SQLite にはユーザーの概念がないのでログインする必要がありません。常に管理者です。

データベースの新規作成

ファイル作成先を指定せずに作成
sqlite3 shop.db
/Users/[ユーザー名]/に作成されます。

ファイル作成先を指定して作成
sqlite3 /Users/wada/Docments/shop.db

ファイルが作成されるのは何かしらの操作をしたあとになるようです。
sqlite> .databases
上記のコマンドを実行すると接続しているデータベース名のリストが得られ、
データベースファイルが存在しない場合、ファイルが作成されます。

データベースの削除

SQLite では1データベース1ファイルなのでデータベースの削除はSQLからではなく、ファイルの削除で行います。
rm shop.db

SQLite コンソールからログアウト

sqlite> .exit
または
sqlite> .quit

次回

次回は「デーブルの作成・確認・削除」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/09/29

[SQLearning][MySQL]ログインとデータベースの作成・削除

SQL ゼロからはじめるデータベース操作を教材にしてMySQLを学ぶ
SQL学習連載「SQLearning」を始めます。
第1回は「データベースの作成」です。

準備は以下の記事で済んでいると想定します。
MacにMySQLを導入してみた | DevAchieve
※想定する MySQL のバージョンは5.1ですが5.5で実行・確認しています。
バージョンによる差異がある場合はマニュアルを併記しておくつもりです。

MySQL クライアントへのログイン

匿名ユーザーとしてログイン
mysql
ユーザー名を指定してログイン
mysql -u [ユーザー名] -p
root としてログイン
mysql -u root -p
まだユーザーを作成したり、パスワードを設定していないのでパスワードなしで root としてログインします。

データベースの新規作成

mysql> CREATE DATABASE shop;
ちなみに作成できたかは以下のクエリで確認できます。
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shop               |
| test               |
+--------------------+

データベースの削除

mysql> DROP DATABASE shop;

MySQL クライアントからログアウト

mysql> exit
または
mysql> quit

次回

次回は「デーブルの作成とデータ型・制約の指定」についてを予定しています。

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/09/26

[書評]SQL ゼロからはじめるデータベース操作

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
ミック
翔泳社
発売日:2010-06-29
ブクログでレビューを見る»
標準SQLでRDBMSの操作を学ぶことのできる入門書。
主要なデータベースでのSQLの文法の違いがあれば
毎回解説があるので安心して読むことができる。
データベース操作に特化していて本書をマスターすれば大抵の事はできるようになる。
重要単語にふりがな振ってあったり初心者を脱落させないようにしっかり解説が入っていて
データベース初心者に是非オススメしたい入門書です。
後半で解説用のサンプルデータの INSERT文の BEGIN TRANSACTION に毎回同じ解説がつくのは
もはや笑いがこみ上げてくるレベル。絶対に初心者を挫折させない配慮を感じられます。

すべての解説で標準SQLを元にOracle, SQL Server, DB2, PostgreSQL, MySQLでの書き方が書かれているので
RDBMSを選ばない学習ができるので、ある程度書ける人も読んでおくと学べることが多いでしょう。
SQL ゼロからはじめるデータベース操作 - ミック/翔泳社:SEShop.com
上記の公式サイトで目次が確認できるので理解できていない部分があったら読むといいと思います。
相関サブクエリとか CASE 式を理解できると SQL の幅が広がると思うので理解しておきたいです。
入門書で相関サブクエリや CASE 式などをわかりやすく解説しているのは本書だけなのではないでしょうか?

本書をマスターしたら後は応用して何とかなったりします。
本書には JOIN しながら相関サブクエリで絞り込みつつ UPDATE する方法は書かれていないけど
それぞれの書き方は解説されているので組み合わせればそんなクエリを書くこともできるようになります。
SQL の基礎知識としてマスターしておきたいですね。

データベース初心者がSQLを極めるためのオススメ書籍6冊 | DevAchieve
データベース初心者が概念や基礎知識を学び、
SQLの書き方やDB設計など習得して
DBとSQLを極めるまでのステップアップとなる本を6冊ピックアップしてみました。

このデータベース坂を一緒に登ってみませんか?
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
2012/09/22

SQL ゼロからはじめるデータベース操作で SQLite を学ぶ

SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)SQL ゼロからはじめるデータベース操作 (CD-ROM付) (プログラミング学習シリーズ)
●達人から学ぶ基礎とコツ

本書は、「データベースやSQLがはじめて」という初心者を対象に、
プロのDBエンジニアである著者がSQLの基礎とコツをやさしく丁寧に教える入門書です。

データベース/テーブルの構造から、データを検索したり更新したりする構文、
よく使う関数、テーブルの結合など、
SQLによるデータベース操作の基本を学習していきます。
WHERE句、GROUP BY句、HAVING句やサブクエリなど、
SQLを使いこなすためのポイントとなる機能や、
初心者にとって理解が難しい部分は、豊富な図とサンプルプログラムでかみくだいて解説しています。
また、標準SQLをベースに、各種データベース(Oracle, SQL Server, DB2, PostgreSQL, MySQL)での違いや、
初心者がハマりやすいポイント、基礎ノウハウについてもしっかり解説。

付属CD-ROMには、SQL学習環境としてPostgreSQL、本書のサンプルプログラムを収録。
本書の内容を試しながら学習することで学習効果が高まります。

・何から学習すれば良いかわからない
・きちんとSQLを書けるようになりたい
・現場で通用する基礎を身につけたい

という方におすすめの一冊です。

_人人人人人人人人人人人_
> SQLiteが入ってない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y ̄

iOS や Android では SQLite なので SQLite でも書けるようになっておきたいところです。
すごくわかりやすく、初心者を脱落させない配慮が感じられる本なのでコレをベースに学習して行きます。
勝手に SQLite 対応しちゃいます。

SQlite のインストール

Windows

SQLite Download Pageから sqlite-shell-win32-x86-<varsion>.zip をダウンロードして
インストールしたら使えます。たぶん。

Mac

たぶんもう入ってます。ターミナルで sqlite3 と入力すれば sqlite が使えるはず。
ダメだったら Windows と同じページから Mac 用の zip をダウンロードしてインストールすればいいと思います。

SQLite の起動

sqlite3 とターミナル上で打てば起動します。

他のデータベースは MySQL しか使ったことないからわからないけど SQLite はユーザーという概念がありません。
一つのデータベースは一つのファイルに収められ、ファイルさえあればパスワードなしで開くことができます。

ヘルプを開く

起動直後に表示されているように.helpでヘルプを表示することができます。

SQLite の終了

.exitまたは.quitで終了します。

これで準備は完了したので次回からはデータベースを作成したりテーブルを作成したいと思います。
2012/09/21

Lita - GUI の SQLite クライアントアプリケーション

Lita - SQLite Administration Tool
Lita is a free and open source SQLite database administration tool for Windows, MacOSX and Linux.
  • Open, create, compact, manage SQLite databases
  • Create, rename, delete, and empty tables
  • Create, rename and delete columns
  • Create, modify and delete records
  • Encrypt or reencrypt your databases
  • Run, import and export your custom SQL statements
  • Create and delete indices

SQLiteでできるほとんどのことができると思われます。
Android や iOS ではデータベースは SQLite を利用しているので SQL のテストをしたい際に便利です。

Android なら端末の以下のパスに .db ファイルがあるらしいです。ROOT権限があれば覗けるとか。
/data/data/[パッケージ名]/database/

iOS なら Mac の以下のパスに .sqlite ファイルがあります。
/Users/[ユーザー名]/Library/Application Support/iPhone Simulator/[ビルド時のiOSのバージョン]/Applications/[アプリのGUID]/Documents/
/Users/[ユーザー名]/Library が隠しファイル設定になっているので TinkerToolで表示させてやりましょう。

SQL ゼロからはじめるデータベース操作が Oracle, SQL Server, DB2, PostgreSQL, MySQL に対応していたので
勉強がてらに SQLite を対応させようと思います。
スマホアプリは SQLiteなのでマスターしておきたいですね。
2012/09/11

[書評]マンガでわかるデータベース

マンガでわかるデータベース
高橋麻奈
発売日:2005-12
ブクログでレビューを見る»
データベースの概念、基礎知識をマンガで解説した本。
マンガと解説文が半々で演習問題もあり。
結構しっかりした内容で後半は全くの初心者にはなんのことだかわからないかも。
サクッと全体を知るには良いと思う。

ちょっと萌え系のマンガだけど意外と内容はしっかりしててわかりやすいと聞いたので読んでみました。
情報処理技術者試験対策にも使えるように書かれているので受験を考えている人にちょうどいいと思います。
簡単な SQL なら書けるけどって人が読んでおくとデータベースのことをもっと理解できるでしょう。

流れとしては、第1章でデータベースとは何か、データベースの必要性について解説し、
第2章で基本的な用語を抑え、第3章で E-R モデルで分析してデータベースを設計し、
第4章で一通り SQL を使ってデータベース操作をする構成になっています。
第5章以降は運用や実際的な利用についてなので初心者にはイメージしにくいかと思いました。

正規化の話が結構わかりやすいので他の本や解説などで理解できなかったのなら読んでみるといいと思います。
非正規形: 一つの項目に複数の値が入っている状態
第一正規形: 非正規形を分割して各行に一つの値が入っている状態
第二正規形: 主キーの値が決まると他の列の値が決まる状態
第三正規形: 主キー以外の値によって他の列が決まることのない状態
ぱっと見、第二正規形と第三正規形の違いがないように見えますが、地味に違います。
「ある値によって他の値が決まる」というのを関数従属といいますが、
これは「Aが決まるとBが決まる」というのを「A→B」と表すと、「A→B」も「い→ろ→は」も含まれ、
この状態のデータベースを第二正規形と呼びます。
このうち「い→ろ→は」については、「い」が決まって「ろ」が決まり、それによって「は」が決まるという
連鎖が含まれています。このような連鎖のことをデータベースでは推移(関数)従属といい、
この連鎖をなくした、「ある値以外で他の値が決まることのない」状態のことを第三正規形と呼びます。

第一正規化は理解していましたが、第二正規化と第三正規化がイマイチ理解できていなかったのですが、
わかりやすいマンガと しっかりとした解説で理解することができました。
基本的なことから始めたい人は結構オススメです!

データベース初心者がSQLを極めるためのオススメ書籍6冊 | DevAchieve
データベース初心者が概念や基礎知識を学び、
SQLの書き方やDB設計など習得して
DBとSQLを極めるまでのステップアップとなる本を6冊ピックアップしてみました。

このデータベース坂を一緒に登ってみませんか?
マンガでわかるデータベース
マンガでわかるデータベース

タグ(RSS)