2012-01-19 14 views
4

usernameのVARCHAR列のサイズを999に変更しようとしています。現在のサイズが小さすぎるため、状況が悪化しています。これどうやってするの?mysqlで一度に複数のテーブルを変更するには?

私は次のことを試してみました、それは一つのテーブルのために働いていたが、複数のテーブル名を更新しようとしたとき、それはエラーが返されました:あなたは、単一のクエリでそれを行うことはできません

ALTER TABLE `TABLE_NAME` CHANGE `username` VARCHAR(999) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL 
+0

エラーの詳細を確認できますか? – JuSchz

+0

これを1つずつ行うか、またはスクリプトを作成してそれを行うことはできませんか? – jakx

+0

@ julesanchez構文エラーですが、非常に多くのテーブルで作業しているため、エラーが長すぎます。そして、@ jakx私はそれぞれのテーブルに対して 'ALTER'をしたいと思いますが、それはできないようです。 –

答えて

3

を。変更する表と列のリストを取得するには、ビューinformation_schemaを照会する必要があります。結果の結果セットを使用してALTERクエリを作成します(外部アプリケーション/スクリプト内またはカーソルとプリペアドステートメントを使用してMySQL内で)

+0

'information_schema'をどのように問い合わせることができますか?私に例を教えてもらえますか? –

+1

http://stackoverflow.com/questions/193780/how-to-find-all-the-tables-in-mysql-with-specific-column-names-in-them/193860#193860 – Ken

0

すべてのテーブルを変更してそのファイルを実行するクエリファイルを作成します。

2

これを実行する唯一の方法は外部ファイル経由であることが判明しました。これは私のインプリメンテーションです。

function changeSchema($oldName, $newName, $type, $len) 
{ 
    $res = mysql_query("SELECT DISTINCT TABLE_NAME 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE COLUMN_NAME = '$oldName' AND 
     TABLE_SCHEMA = 'your_database_name'"); 
    if($res) 
     while($line=mysql_fetch_object($res)) 
      mysql_query("ALTER TABLE `$line->TABLE_NAME` CHANGE `$oldName` `$newName` $type($len) NOT NULL "); 
    } 
} 

私は簡単に必要なテーブルを変更できました。

関連する問題