[前][次][番号順一覧][スレッド一覧]

mysql:14461

From: Mikiya Okuno <Mikiya Okuno <okuno@xxxxxxxxxx>>
Date: Thu, 24 Apr 2008 10:17:15 +0900
Subject: [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@xxxxxxxxxx> wrote:
>
>> こんにちは。池田です。
>>
>> *SQLだけで実現する方法*を探している理由は何でしょうか?
>
> レンタルサーバですのでシェルを利用することができません。
>
> PHPは利用できますので、
> PHPを利用してshow tablesで対象テーブルを探し、
> for文とかでalter table文を発行するという
> 方法も考えたのですが、どうも面倒だし、
> 自分が知らないだけで、SQLだけで実現する方法が
> あるのではと思いましたもので投稿させていただきました。
>
>
> 以上、よろしくお願いします。
>
>
>


[前][次][番号順一覧][スレッド一覧]

     14458 2008-04-24 08:34 ["なかで" <nakade@xxx] 複数のテーブルに対してALTER TABLE文を実行する方法
     14459 2008-04-24 09:43 ┗[Tetsuro IKEDA <te.ik]                                       
     14460 2008-04-24 10:09  ┗["なかで" <nakade@xxx]                                     
->   14461 2008-04-24 10:17   ┣[Mikiya Okuno <okuno@]                                   
     14462 2008-04-24 10:25   ┗["Tetsuro IKEDA" <ikd]                                   
     14463 2008-04-24 10:34    ┗["なかで" <nakade@xxx]