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]