如何在mysql中一次更改多个表?

时间:2012-01-19 23:13:37

标签: mysql alter

我正在尝试更改多个表,并将username VARCHAR列的大小更改为999,因为它的当前大小太小,现在事情搞砸了。我怎么能这样做?

我已尝试过以下内容并且它适用于一个表,但在尝试更新多个表名时,它返回了错误:

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

3 个答案:

答案 0 :(得分:5)

您无法使用单个查询执行此操作。您需要查询information_schema个视图以获取要更改的表和列的列表。然后,您将使用生成的结果集创建ALTER查询(在外部应用程序/脚本中或使用游标和预准备语句在MySQL中)

答案 1 :(得分:3)

我发现唯一的方法是通过外部文件。这是我的意思:

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 ");
    }
}

然后我能够轻松修改我想要的任何表格。

答案 2 :(得分:0)

编写查询文件以更改所有表并执行该文件。