SQL参考本

2010/01/08 | データベース

今、一番重宝している本のメモ。

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

データベースなんてデータの保存庫と思っていた。大量のデータを扱う機会があまりなく、かつ複雑なSQLも今まで必要なかったけれど、最近はそうもいかない。適当なSQLを記述していると、実行速度が極端に遅くなったりすることが多くなった。SQL文をEXPLAINするのはもちろんだけど、それだけでは効率化する方法はわからない。例文がやっぱり重要だ。

そこでこの本。とてもいい!。

まずデータベースに依存しない。汎用的なSQL(92)での記述なので、どのデータベースでも対応出来る。そしてサンプルが豊富だし、変にデータベース技術者かぶれなSQL文ばかりでなくて、現場に則したSQL文を提供してくれる。SQLに関して初心者の域を脱したと思ったら、次のステップで読むには最高の良書だ。

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

phpMyAdminでVIEW

2010/01/03 | MySQL

MySQLはバージョン5からVIEWを使用できるようになった。最近はデータベースをコマンドラインから扱うことがあまりなく、基本的にphpMyAdminから操作することがほとんどだ。ではphpMyAdminから簡単にVIEWを扱うことが出来るのか。

VIEWの作成は簡単だ。SQLを実行したり、テーブルに対して検索をかけたりしたあとに表示される結果のページに「CREATE VIEW」とあるので、これをクリックするとVIEWが出来上がる。もちろんCREATE VIEWのSQL文を実行することでもVIEWを作ることができる。

しかし現状のphpMyAdminの最新バージョン3.2.4で確認したが、VIEWの内容を、インタラクティブに確認したり修正したりする方法が見つけられない。ウェブで調べたが、そもそもそういう情報を求めている人もあまりいないのか、期待する検索結果が出てこない。結局SQL文を実行するしかないみたい。

VIEWの内容を確認する方法は以下のSQL文。

SHOW CREATE VIEW view_name;

VIEWを修正するためのSQL文(CREATE VIEWの構文をALTER VIEWにするだけ)。

ALTER VIEW view_name AS SELECT … ;

まだまだVIEW機能はこなれていないのだろうか。

phpMyAdminでインポートファイルのサイズを増やす

2009/12/25 | MySQL, PHPの基本

MySQLのダンプデータが60MBほどあった。phpMyAdminでインポートしようと思ったのだが、アップロードできるファイルの最大は16MBとなっていた。60MBのファイルと言っても所詮テキストファイルだから圧縮してしまえば12MBになるから、アップロード自体は出来る。しかしいろいろ考えて、アップロード出来る容量を増やすことにした。

ここのサイズ指定は、単純にphp.iniの設定に依存しているらしい。おそらく.htaccessを設置すれば事足りるだろうが、設置するとInternal Server Errorが表示されてしまう。とりあえずローカルな環境(Windows)で試そうと思っているのだが、なにか問題でもあるのだろうか。

本筋でないことに時間を割くのが嫌なので、php.iniを変更することにした。よくよく考えればおバカな話だが、読み込んでいるphp.iniがどのファイルか分からなくて、何回変更しても、変更した設定が有効にならなかった(正しいファイルを変更していないのだから当たり前)。初心に帰って、phpinfo()で表示されるphp.iniの場所を頼りに設定ファイルを編集した。

Windows版Xamppでは、xampp/apache/bin/php.iniを使用しているらしいことがわかったので、そのファイルを編集した(xampp/php/配下にもphp.iniやphp5.iniがあるので注意が必要)。修正箇所は以下の3つ。

  • memory_limit 512M
  • post_max_size 256M
  • upload_max_filesize 128M

なんとも大盤振る舞いだが、ローカルな環境だから気にしないでいい。php.iniを修正したので、修正後はapacheの再起動が必要。再起動後にphpMyAdminのインポートの項目を見ると「最長: 131kKiB」となっていたkKiBだからMiB、つまり131MiBになった。これで無事一発で処理が完了した。

もし処理が遅い場合はmax_execution_timeの設定を増やしておけば良いかもしれない。

日付関連の便利な関数

2009/12/09 | MySQL

今、MySQLが熱い。MySQLの日付関連の便利な関数(もしくは使い方)を列挙しておく。

  • SELECT NOW();
    現在の日時。年-月-日 時:分:秒。
  • SELECT CURDATE();
    今日。年-月-日。
  • SELECT DATE(CURRENT_DATE( )-1);
    昨日。年-月-日。DATE_ADD関数とか使うほうがいいかも。
  • SELECT UNIX_TIMESTAMP();
    現在のUNIX TIMESTAMP。
  • SELECT FROM_UNIXTIMESTAMP(UNIX_TIMESTAMP());
    UNIX TIMESTAMP値から日付を返す。年-月-日。

他にもいろいろある。類似の関数で時刻出したりとかもできる。VIEW作るときに幅が広がりそう。

持続的接続を理解するために(その8)

2009/12/08 | apache, MySQL

ここまでやってきてだいぶん理解が深まった。「apacheの子プロセスごとに持続的接続が管理される」かどうかを今一度調べないといけないが、仮にそうだとすると、世間のブログで書かれていることには結構嘘が多いことになる(嘘というかしったかぶり)。

例えばとあるブログで「同じホスト、ユーザ、パスワードのコネクションであれば前回のコネクションを使いまわす」という記述があるが、前述の論理にもとづけばこれは嘘。処理する子プロセスが違えば、当然コネクションなんて残っていない(初めからそんなものは存在しない)ので、最初から接続することになる。

何度かいろいろな処理があるうちに、たまたま、以前に使用したプロセスが処理を担当することになった時だけ、以前使用したコネクションが使いまわせることになる。

難しいことをさらっと書いてあるブログは多数存在するけれど、全てが信用できるわけではないって改めて理解した。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net