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]