2009-11-30 4 views
10

約30のデータベースで実行する必要があるMySQL用のスクリプトファイルがあります。MySQLスクリプトで現在のデータベースを設定する

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `availability` ... 

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `reliability` INTEGER ... 

このスクリプトでは、より多くの行があると、私は更新される現在のデータベースのループでそれを自動化したいと思います。ここでは、スニペットです。カーソルを使用してリストとループを取得しましたが、ここで私は問題に遭遇しています。

私がカーソル内の特定のデータベースを使用しているとき、そのデータベース名は変数です。私は単にALTER TABLEのcurschemaと言うことはできません。 tblusersスクリプトでは、curschemaという名前のデータベース(操作を実行したいデータベース名を含む変数の名前)が存在しないというエラーが出ているためです。私は、パラメータを使用して文を作成し、実行することにより、この問題を回避することができました:

SET @curschema = curschema; 
SET @query = NULL; 
SET @email = emailAddress; 
SET @pass = pass; 
SET @statement = CONCAT('SELECT userid INTO @query FROM ', @curschema, '.tbluser 
PREPARE stmt FROM @statement; 
EXECUTE stmt; 

問題は、(上記のような)実行可能な文字列を設定すると、コードの行数十と非常に面倒な作業になるだろう、です私は走らなければならない。私は操作の現在のデータベースを設定してからちょうど通過し、そのデータベースに各ループをリセットすることができやり方があったことを願っていたので、私の一般的な文が実行される可能性があります。

(私のループの開始)

のSET DATABASE database0 - (database29に至るまで)

- database0と実行文....上記のコマンドで暗示されている29

ALTER TABLE `tblusers` ADD COLUMN `availability` TINYINT(1) UNSIGNED ... 

ALTER TABLE `tblusers` ADD COLUMN `reliability` INTEGER UNSIGNED NOT ... 

(私のループの終わり)

操作を実行できる現在のデータベースを設定するコマンドが存在しますか?そのようなコマンドが存在しない場合、私のタスクを達成するためのより簡単な方法がありますか?この時点で、スクリプトファイル全体を実行可能/パラメータ化された文字列に書き換えるのではなく、すべてのデータベース名を検索/置換するのが30回簡単であることがわかりました。

ありがとうございます!

答えて

28

USEを試しましたか?

USE db_name 

のUSE db_nameのステートメントは、後続の文のため として、デフォルト(現在の)データベースをDB_NAMEデータベースを使用するためのMySQLに指示します。データベース は、セッションが終了するか、別のUSE ステートメントが発行されるまでデフォルトのままです。

例:

USE db1; 
SELECT COUNT(*) FROM mytable; # selects from db1.mytable 
USE db2; 
SELECT COUNT(*) FROM mytable; # selects from db2.mytable 
+0

はそれを試していないが、それは御馳走を作品のようにここに私の簡単なテストからそれが見えます!ありがとう!私はオンラインでMySQLのドキュメントを見ていて、決定的なものは何も見つかりませんでした。 – afilbert

+0

Doh!今私はMySQLのドキュメントでそれを見つける。私はときには、正しい検索クエリを尋ねる方法を知る必要があると思います。再度、感謝します! – afilbert

+0

問題ない。 –

関連する問題