スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

awkでCreate Table文修正

昨日、MCEAのDB研究会に出て、awkを使って、Excelのデータ(CSV)からCreate文を生成するスクリプトを紹介してもらった。今まで、ログの解析とかちょっとしたことでawkを使っていたが、こういう用途では使ったことがなかったので参考になった。

早速使ってみた。
今自分が持っているErwinでは、MySQLのスクリプトは出力できないので、Oracle用に出力したものを、MySQLに変更することにした。awkを使うと、sedを使って単純に置換するよりももっと複雑なことができる。簡単な置換は、sedで行い、ちょっと凝ったことはawkを使った。

BEGIN {
print "alter table m_group engine=myisam;\n"
}
{
if ($0 ~ /CREATE/) {
print $0
table = $3
next
}
else if ($0 ~ /PRIMARY/) {
print " CRDT TIMESTAMP NOT NULL,"
print " UPDT TIMESTAMP NOT NULL,"
print $0
idx = index($3,")")
key = substr($3,2,idx-2)
}
else if ($0 ~ /\);/) {
# print ") type=innodb;\n"
print ");\n"
print "alter table "table" engine=innodb;"
print "alter table "table" default charset=SJIS;"
if (table ~ /(M_GROUP|M_ACTITEM|M_ITEM|M_FAVORITE|M_CONTAINER|T_BALANCE|M_PARTNER|M_USER|T_RECORD|M_PLAN)/) {
print "alter table "table" modify "key" INTEGER AUTO_INCREMENT;"
}
next
}
else {
print $0
}
}

CREATE TABLE .. からテーブル名を取得し、CREATE文のあとにALTER文を挿入する。
各テーブルに、作成日時・更新日時を追加する。Erwinで全テーブルに一括で登録できればいいが今持っているのではできないので、awkで追加した。まあ、このぐらいはsedでもできそうだが。

awkはよかったものの、またMySQLで苦戦することになる。前に発行できたSQLがなぜかエラーになる。CREATE文の最後に type=innodb;を指定すると、

ERROR 1005 (HY000): Can't create table '.\acctbook\m_group.frm' (errno: 121)

となってしまう。前はこれでうまく行ったはずだが。ネットで調べてみると、参照制約があると何かと問題があるようだ。そのほかにも、データベースをいったん削除し、再作成してみるとうまくいったりとかいったこともあった。上記のCreate文も別のデータベース上で実行すると何のエラーも出ない。不可解なことが多い。おそらく今うまくいったものも明日にはエラーになるかも知れない。

あと、Date型でデフォルトにnow()を指定すると、0000-00-00がセットされてしまう。TIMESTAMP型を指定すると、default指定していなくても、現在時刻がデフォルトではいる。

バグなのか使い方が悪いせいなのか、わからないことが多い。本当にこれ商用で使えるのだろうかと思ってしまう。

関連記事
スポンサーサイト

trackback


この記事にトラックバックする(FC2ブログユーザー)

MySQL 参照制約

<BR> awkでCreate Table文修正この問題は根深い。新たにデータベースを作成してそこにCREATE文を実行するとOKだった。なので、いったんデータベースを削除してから実行した。確か前はこれでうまく行ったのだが、今回は駄目。MySQLを再起動したりとかしたがこれもだめ。errno

コメント

非公開コメント

TIMESTAMP型にしたが、CRDT,UPDTの2列をセットすると、なぜかCRDTにしか現在日時がセットされず、UPDTには0000-00-00がセットされる。???

デフォルトにCURRENT_TIMESTAMPを使おうとしたが1列にしか使えない。

ERROR 1293 (HY000) at line 6
作成日時と更新日時にセットしたいが、MySQLでは更新日時しかカラムは使わないということなのだろうか。
プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。