先日ツイッタランドでこちらのスライドを拝見しまして。
それでMySQL5.6の日本語ドキュメントを読もうかな、と、手を出しました。
とりあえずiPadにダウンロードして、読んでます。3648ページもあるので、1日10ページのペースで1年かけて読もうかな、と。 とはいえじっくり読んでたら途方も無い時間がかかるので、流し読みしつつ、気になったとこはじっくり読むスタイルで続けていこうと思う。 ペンシルを使えばPDFに書き込んだりできるし、ブックマークも併用していい感じに読めていて、今のところ楽しい。
そんななか、暗黙的に代入されるやつの動きについて、早速発見があった。
/* int型のカラムにstringいれても入るやつ*/ insert into sample_table set num_column = '12月'; /* ってやると `num_column` には 12 が入る、みたいなやつ */
それありきで使ってたけど、なぜそうなってるかの部分はいままで気にかけなかった。 けど、1章にそのあたりのことが書いてあって、なるほどと思った。 トランザクショナルじゃないテーブルにデータを入れるとき、途中で処理が止まってしまったらロールバック出来なくてこまるから、そのまま暗黙的な型変換をして代入しちゃうよ、っていう理由があった。 MyISAMの歴史ありきの考え方なんだろうなと思うし、そういう背景があっての挙動ということを理解すると、使う時の気をつけ方も変わるなぁ。
それでこの挙動も sql_mode
で制御できるし、これまでしようと思ったことすらなかった。
そんな感じで発見もあるし、知識の確認にもなるし、もっと早くやっておけば良かったと思う。 とはいえ今から始めるのがこれからの自分にとっての最速のタイミングなので、気負わずのんびりやっていこう。