MySQL

必要になりそうなので公式サイトのドキュメントに目を通している最中。


だがしかし、「外部キー制約が実装されていません」というのを見てかなりひいた(笑)。正確にはストレージとしてInnoDBという形式を選択しないと外部キー制約が使えないらしい。

トリガとかビューも5で実装したらしいし…

基本的にトランザクションのない格納システムを推奨しているようだし…(これは任意に選択可能。)


私が使うとしたら、とにかくストレージシステムをInnoDBにする必要があるようだ。複雑な更新のあるデータベースで、外部参照制約もロールバックもなしというのは考えられない…。あ、郵便番号データとかを載せる分にはなんの関係もないか(笑)



MySQLの「独特な動作」に関する記述をドキュメントで見ながら、トランザクションというものは、プログラム作成の時に使う明示的なものの他にも色々重要なのだなぁ、と思い知った。MySQLトランザクションを使用しない事が多いので、「参照整合性」とか「ユニーク制約」とかでひっかかった時の処理が大変そうだ。(いや、基本的にはMySQLが自分で勝手にどうにかするんだが。)


PostgreSQLと比べると、文字コードの指定のタイミング*1とか、テーブルごとにストレージシステムを指定したり*2とか、かなり勝手が違う。



あと、日本語版のマニュアル(http://dev.mysql.com/doc/refman/5.1/ja/index.html)は機械翻訳の間違いとか、誤変換とか、編集時に消し忘れたゴミ*3だとか、色々気になる…



色々覚悟を終了した後、テストサーバーで試してみようとすると…あれ?うごかない?

yumのinstalledリストに載っているので既に入っているんだろうと思っていたのだが…「これはクライアントプログラム」であった(笑)。サーバープログラムをインストールするところからですか。

*1:ありとあらゆるタイミングで、文字コードとソート方法?の指定を行える。これは単に高機能なだけだし、指定しなければ上位の層で指定したものが有効なので、データベース作成時に宣言しておけば後は特に意識する必要がない。

*2:最新の英語版マニュアルを見ても、データベース単位でストレージシステムをまとめて指定する項目が見つからない。サーバーの既定値は見つかったが。

*3:色々なところに「If ...」みたいな英文が混じっている。