【MySQL】DBをOracleからMySQLへ移行する件について ~その2~
Java製アプリケーションを
別の環境でトレースするときに
オリジナルはDBがOracleだったけど
MySQLに無理やり変更してみたときの話
Auto Commitの設定
MySQLではAuto Commitがデフォルト
一方、OracleではCommitありがデフォルト
なのでOracleを前提にしたプログラムでは
TransactionやらRollbackがどうこうという
エラーがでる可能性が高い
なのでAutoCommitをOFFにする
SET autocommit=0;
検証や研究用の環境ならむしろ
AutoCommit便利だけど、本番の環境では
やっぱりCommitありのほうが安心だと思う
カラムのデフォルト制約のこと
データをインサートするとき
デフォルト値が設定してあると
CREATE TABLE AAA ( BBB int , CCC int default 0 );
例えば↑のようにテーブルを作成した場合、
insert into AAA values(1);
とインサートすると
BBBカラムに1、CCCカラムには
デフォルト値の0が入る(はず)
こともあろうにJavaのプログラムのなかで
こんな記載がされていたわけで、、
Workbenchとかで手動でSQLを書いて
データを入れ込むのであれば
CCCカラムには何も指定されてないよ!
と警告がでるだけで処理自体はされる
で、JavaでDBを使うとなると
ドライバーを使用することになるはず
現行のはOracleのJDBCドライバーを
使用していてこちらは上記のSQLに対応して
問題なく使えていた
同様にMySQLのJDBCドライバーを使った場合
警告がでるだけでなくException Error
つまりエラーでプログラムが中断する…
これはMySQLのドライバーのプログラムを
書いた人がそういう仕様にしたらしく
どうしようもない様子
(英文サイトを読むと多分そんな意味あい)
確かに処理としては正しいのだろうけど、、
まぁ、無償のDBを便利に使えるドライバーを
善意で提供してくれているのだから文句など
言えるはずもなく
と、いうわけで、
根本的な解決方法は
Javaのプログラムを修正するしかない
ROWIDについて
OracleにはROWIDという隠し列があり
SELECTで呼び出すことができる
中身はというとランダムにふられた
18桁の英数字で行を特定できる
早い話がキー項目
なのでMySQLでこれを実現するには
キー項目の列を作ってやればいいことになるが
問題はSQL文がプログラムに
組み込まれている場合
ROWIDを絞り込み条件にした
SELECT文なんかがあったりしたら
独自に設定したキー項目に書き換えないといけない
ちなみにOracleのROWIDは
行を削除してバックアップから戻す場合など
変わることがあるので
あまり使わないほうがいいみたい
まだ他にもいくつかあるので
また次回に