データベース関係の変更カンペ

現場で共有してもらっているカンペから抜粋。

HibernateとかS2DaoなどのO/Rマッピングフレームワークや、SQLの自動生成をしてくれるフレームワーク/ライブラリを使わない(つまりSQLを手書きする)場合には以下の点に注意。

  1. insert SQL必ず列を指定する。 insert into hoge(col1,col2,col3) values... という具合
    • 列の変更に弱いSQLになることを防ぐ
    • 列の順序の変更も起こりうる。頻繁にツギハギで運用してきたデータベースにおいては、CREATE TABLEだけうまくメンテされていることもあり、こうなると再構築したとたんいままでのSQLで列順序が正しくなくなり動かなくなることもある
  2. あとで NOT NULL かつ DEFAULT指定がない列を追加する場合は insert 系を見直す必要がある
    • insert文で列名を指定していないのであれば確実にエラーになるはず
  3. select * from する場面において ResultSetからの取り出しを数値インデックスで指定してはいけない
    • 列の順番が変更される可能性がある (insertの例を参照)

かなり低水準(いろんな意味で)な話ですが、まだまだこの手のノウハウは役立ちます。