Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

タグ:SQL

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版

500ページ以上ある本ですが、解説が丁寧なのでスムーズに進みました。以下、感想。


MySQLを学ぶうえで最初のハードルとなるのが環境構築です。本書は、WindowsにXAMPP(Apache, PHP, MySQL等がまとめられたソフトウェア)を入れ、文字コードはShift-JIS、という、読者の大多数を占めるであろうWindowsユーザーにとってフレンドリーな環境を作る方針になっています。Macユーザー向けにもMAMPの導入方法が載っています。

が、この点、私は不満です。というのも、MySQLを仕事で使う場合、そのOSはLinuxである可能性が高いからです。そして、WindowsとUnix(Linux、Mac等)では、MySQLの挙動が一部異なります。例えばテーブル名。Windows版MySQLでは大文字と小文字を区別しませんが、Unix版は区別します。「tbUser」と「tbuser」は、Windows版では同じテーブルですが、Unix版では別物です。その他のWindows版とUnix版の相違については、MySQLリファレンスが参考になります。


本書のメインである、データベース言語SQLの解説については、さすがに丁寧で充実しています。本書をやれば、基本的なCRUD文(データベースの作成、データの呼び出し、データの書き込み、データの消去)が書けるようになります。プログラマーにとって必要最低限のSQLは身につきます。また、ビュー、トランザクション、ストアドプロシージャとストアドファンクションについてもさわりだけは学べます。その先、MySQLのチューニングや、高度で複雑なSQLは、本書の守備範囲を超えます。


MySQLとセットで用いられることの多いプログラミング言語PHPについては、MySQLとの組み合わせで必要な最低限の範囲を絞って書いてあります。変数と配列、条件分岐と繰り返しといった、プログラミングの基礎に、MySQLを利用するための関数を加えた内容ですね。

WebページでのMySQL利用で問題となるSQLインジェクション対策等、セキュリティについても触れられています。自分の作ったサイトの脆弱性を自分で攻撃する、という流れが面白かったです。


HTMLに関しては、酷いの一言。本書に載っているHTMLは、10年前のそれです。XHTMLを経た現代のマークアップは、本書とは全く異なった書き方をします。まあ、タグの大文字はHTML5の仕様上はOKだし、<html><head><body>などはHTML5では省略可能とされています。ただし<FONT>、テメーはダメだ。

<FONT>タグのような、スタイル指定のための要素は、HTML5では廃止されています。<B><U><I>も同様です。ブラウザーは下方互換性を保つように作られているので、<FONT>タグを使っても当面問題となることはないでしょう。しかし、スタイル指定のための要素を使うと、HTMLを書くのにも煩雑ですし、後々のメンテナンスが大変になります。Webページのデザインの調整を行いたいなら、CSSを学ぶべきです。HTML/XHTMLスタイルシートレッスンブックのような良書があります。


後半がイケてなかったので、読後感は良くありませんが、前半のSQLの解説は丁寧です。オススメというほどではありませんが、SQLの部分だけでも元は取れるはず。あなたがMySQL初心者なら、買って損はしないでしょう。

ただ、Windows上での環境構築にせよ、HTMLタグの解説にせよ、初心者に理解しやすい内容(裏を返せば、解説の容易な内容)を選択した結果、実務の観点からするとツッコミどころがある、という点には留意すべきかと。

今日、↓を読了しました。

新版Perl言語プログラミングレッスン入門編
新版Perl言語プログラミングレッスン入門編

実は、プログラミング言語の本をcover to coverで読み通したのは本書が初めてだったりします。『たのしいRuby』は、5分の3(全5部中、第3部まで)で止まってます。

仕事で使っているPHPやSQLはつまみ食いで身につけたし、JavaScriptに至っては、見よう見まねの域を出ません(jQueryのドーナツ本は最後まで読みましたが、jQueryは言語とは呼べないでしょう)。


本書が読み通せたのは、ひとえに、著者である結城浩氏のおかげです。配列のようなプログラミング初心者のつまづきがちなポイントや、正規表現のような苦手とする人の多い分野を、類書よりもはるかに丁寧に解説しています。

内容が全部分かったかというとそんなことはなく、Perl独自の部分はやったそばから忘れてたりもするのですが、他の言語でも共通する部分(正規表現の基本文法等)はしっかりと身につきました。

これで、今月末のYAPCに参加するのに最低限の予習はできたかな、と。


次のステップは『初めてのPerl 第6版』といきたいところですが、その前に一度、仕事で使う言語について、知識をしっかりさせておこうかな、とも思ってます。今まで、PHP+SQLは、仕事で必要になる→調べる という学習法がメインで、実際効果も上がっています。

しかし一方で、PHPのオブジェクト指向の部分などは、利用することはあっても自分で書くことはないため、理解が不十分。

SQLに関しては、基本的なCRUD文さえ書ければ仕事にはなりますが、応用的な書き方ができると省力化が出来ます。私の経験だと、SELECT DISTINCTを知らなかったばかりに、PHP側で重複レコードを弾く処理を書く、というムダをやったりしました。「SQLで工夫してPHPはサボる」と「SQLはサボってPHPで頑張る」だと、SQLで工夫したほうが処理の効率も良くなるようです。

ということで、しばらくはPHPやSQLの学習をメインにしようと思ってます(将来性を考えるとJavaScriptなんでしょうが、最近は仕事でJavaScript書く機会がない…)。

CREATE TABLEする段になって、自信が持てずリファレンスを見ることがたまにあるので、よく使うものをメモ。

CHAR 固定長文字列(255文字まで)
VARCHAR 可変長文字列。格納するバイト数を指定する(255文字まで)
TEXT テキストデータ。65,535文字まで。容量は指定しない
INT 整数(負の数もOK)
DEC 小数も扱える
DATETIME 日付と時間
DATE 日付のみ
BLOB バイナリデータ(65,535バイトまで)

CHAR(10)と書くと、10文字を格納可能な固定長文字列のデータ型となる。VARCHAR(10)だと10バイトなので、日本語等のマルチバイト文字列を扱う際には注意が必要。MySQL 4.1以降では、VARCHAR(10)は「10文字」となり、半角英数であれ、マルチバイト文字であれ、10文字を格納できる。VARCHAR(10)で10バイトとなるのは、MySQL 4.1よりも前のバージョン。

INT(10)だと10桁の整数。DEC(10, 5)と書くと、全部で10桁で、小数点以下5桁まである数を格納できる。

会社:PHPとMySQLに関してはひと通りやった。その後はJQuery。セレクタ機能はCSSと似ているので、感覚的に理解しやすい。お手軽に動的な表現ができるのはスゴイ。

自宅:phpMyAdminを使ってSQLの練習。

HTMLファイル書きがメインだと思ってたけど、最初はPHPの理解度のテストがメインだった。
SQLでテーブルを作って、HTMLに流しこんでCSSで装飾したり、フォームから値を打ち込んでSQLのテーブルの値を操作したり。
ソースがsmartyというテンプレートエンジンを使っていたこともあって、なかなか上手くいかず。

PHP, MySQL, smarty が目下の課題。



このページのトップヘ