2008年4月24日

[mysql 14461] Re: 複数のテーブルに対してALTER TABLE文を実行する方法

こんにちは、奥野@MySQLです。

5.0 なら INFORMATION_SCHEMA から情報を持ってきて、
文字列操作によりプリペアドステートメントを作るという方法が
出来るでしょう。

こんな感じで。
SELECT CONCAT('ALTER TABLE ', TABLE_NAME, 'ADD うんたら') INTO @stmt FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'users_%' AND TABLE_SCHEMA='かんたら' LIMIT 1;

PREPARE stmt1 FROM @stmt;
EXECUTE stmt1;

プロシージャでカーソル使ってループさせれば目的を達成できるような気がします。
その場合LIMIT 1はナシで。

ただし 4.0 はINFORMATION_SCHEMAもプロシージャもないので
この方法は出来ないですね。
※4.0は今年いっぱいでサポート終了ですので早めに移行しましょう。

でも池田さんの仰ることが的を得ています。
PHPが使えるなら、PHPでやるのがいいでしょう。
たぶん上記の方法も実装は面倒といえば面倒です。
--
Mikiya Okuno, Support Engineer
MySQL KK, http://www-jp.mysql.com/
Office: Ebisu IS Building, 6th floor,
13-6 Ebisu 1-chome,
Shibuya-ku, Tokyo 150-0013
Tel: 81-(0)3-5918-7523
Fax: 81-(0)3-5918-7510

Are you MySQL certified? http://www.mysql.com/certification

On 2008/04/24, at 10:09, なかで wrote:

> 中出です。
>
> レスありがとうございます。
>
> ----------------------------------------------------------------------
> Thu, 24 Apr 2008 09:43:51 +0900
> Tetsuro IKEDA <te.ikeda@xxxxx> wrote:
>
>> こんにちは。池田です。
>>
>> *SQLだけで実現する方法*を探している理由は何でしょうか?
>
> レンタルサーバですのでシェルを利用することができません。
>
> PHPは利用できますので、
> PHPを利用してshow tablesで対象テーブルを探し、
> for文とかでalter table文を発行するという
> 方法も考えたのですが、どうも面倒だし、
> 自分が知らないだけで、SQLだけで実現する方法が
> あるのではと思いましたもので投稿させていただきました。
>
>
> 以上、よろしくお願いします。
>
>
>


投稿者 xml-rpc : 2008年4月24日 10:17
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/72496
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。