人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのデータベースで、
Table_ABC、Table_DEF、Table_GHI・・・(アンダーバー以降の名前はランダム)
といった同じ構造のテーブルが100個近くあります。このテーブルの構造をPHP4で一気に変更したいのですが、可能でしょうか?可能でしたら方法をお教え下さるようお願いします。

またこのテーブルは今後も増える可能性があるのですが、同じ構造なら1つのテーブルにまとめた方法が良いのでしょうか?ちなみにこのテーブルは個人の日記みたいなものが記述されており、行数は一日1行くらいのペースで増えます。

どうぞアドバイスを下さる様お願いします。

●質問者: kawasald
●カテゴリ:コンピュータ
✍キーワード:MySQL アドバイス データベース ランダム 名前
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kura_jet
●80ポイント

http://www.mysql.com/

MySQL AB :: The world's most popular open source database

URLはダミーです。

日常的にテーブル構造を変える必要があるのであれば、PHPで作った方がいいと思いますが、今回1回だけであれば、SQLスクリプトを作成して、実行した方が早いと思います。

1.データベースバックアップ

mysqldump ¥

--add-drop-table ¥

--quote-names ¥

--complete-insert ¥

--result-file=${BACKUP_FILE} ¥

--host=${DB_SERVER} ¥

--user=${DB_USERNAME} ¥

--password=${DB_PASSWORD} ¥

${DB_DATABASE}

2.上記1で出力した${BACKUP_FILE}を変更し、${MOD_FILE}とする

3.変更したスクリプトを実行

mysql --user=${DB_USERNAME} ¥

--password=${DB_PASSWORD} ¥

${DB_DATABASE} < ${MOD_FILE}

また、複数テーブルをひとつに纏める件ですが、全くの同じ構造であれば、1つのテーブルに纏めるべきだと思います。各テーブル1日1行であれば、まとめても1日100行ですので、たいした行数ではないと思います。

そのほうがテストも管理も楽です。

◎質問者からの返答

なるほど!しょっちゅう構造を変えるわけではないので、スクリプトの方が楽ですね。

ただ、SQLの知識が乏しいので、スクリプトの意味を十分理解できません。

お手数でなければ解説も付け足していただけると助かります。

本当にすみません。

同じ構造ならやっぱり一つにまとめるのがいいのですね。

大勢が一つのテーブルを読み書きするのが不安だったので複数に分けてしまったのですが、逆に管理が大変になって困っていたのです。アドバイスありがとうございます。


2 ● upride
●80ポイント

http://google.com/

Google

urlダミーです

<?

//DB接続

$MyLink = mysql_connect( ”ホスト名” , ”ユーザ名” , ”パスワード” );

mysql_select_db( ”データベース名” , $MyLink );

//テーブル全部取得

$MyResult = mysql_list_tables( ”データベース名” , $MyLink );

while($MyData = mysql_fetch_array($MyResult)){

//テーブルレイアウト変更

strsql = ”Alter Table ” . $MyData[0] . ” 変更したい内容のSQL文 ”;

$result = mysql_query( $MyQuery , $MyLink );

}

?>

大まかに書くとこんな感じでしょうか

どんな風にレイアウト変更するかに

よるのでその部分のSQL書いてません

エラー処理も書いてません

複数のテーブルを一つにまとめる場合

ユニークなキーを保つため

フィールドを追加することをお勧めします

推測ですが日記一人分=1テーブルが現状ではないですか?

全員分=1テーブルにまとめるなら

「誰」のデータかを特定する値が必要になるので。

◎質問者からの返答

すごく分かりやすいです!ありがとうございます。

ちなみに現在のデータベースにはTable_ABC・・・以外にも構造の違うテーブルが存在しています。上記の方法だと構造の違うテーブルにも影響がありそうですが、大丈夫なのでしょうか?

まとめる際の注意点もありがとうございます。

非常に有益な情報でした!


3 ● upride
●80ポイント

http://yahoo.co.jp/

Yahoo! JAPAN

またまた投稿です

変更したくないテーブルをはじくには

$MyResult = mysql_list_tables( ”データベース名” , $MyLink );

while($MyData = mysql_fetch_array($MyResult)){

if ( $MyData[0] != ”変更したくないテーブル名1”) or ( $MyData[0] != ”変更したくないテーブル名2”) {

//ここは変更したいテーブルなら処理が走る

〜レイアウト変更処理 〜

}

}

こんな考え方でどうでしょうか

◎質問者からの返答

ありがとうございます。これで完璧です!

かなり勉強になりました!!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ