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

Posted

技术标签:

【中文标题】如何在mysql中一次更改多个表?【英文标题】:How can I alter multiple tables at once in mysql? 【发布时间】:2012-02-14 15:03:01 【问题描述】:

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

我尝试了以下方法,它适用于一个表,但是当尝试更新多个表名时它返回错误:

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

【问题讨论】:

我们可以查看错误的详细信息吗? 不能一一做或者写个脚本来做吗? @julesanchez 这是一个语法错误,但是因为我正在处理这么多表,所以错误太长了。 @jakx 我想为每张桌子ALTER,但似乎做不到。 也许您可以尝试使用 2 个表,然后显示错误? 【参考方案1】:

你不能用一个查询来做到这一点。您需要查询information_schema 视图以获取要更改的表和列的列表。然后,您将使用生成的结果集创建 ALTER 查询(在外部应用程序/脚本中或在 mysql 中使用游标和准备好的语句)

【讨论】:

如何查询information_schema?你能给我举个例子吗? ***.com/questions/193780/…【参考方案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 ");
    

然后我可以轻松地修改我想要的任何表格。

【讨论】:

这个是php还是查询中使用的函数? @Gagantous 这绝对是 PHP 和 Raath 在 2012 年发布的,这可能是他尚未使用 MySQLi 的原因。 ;-)【参考方案3】:

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

【讨论】:

以上是关于如何在mysql中一次更改多个表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 c# wpf 中一次加载/保存多个文件? [关闭]

如何在Xcode的Interface Builder中一次编辑多个约束

如何在 Android 应用程序中一次更改所有活动转换?

Xcode:如何在应用程序中一次更改所有字体?

如何在 Eclipse 中一次显示 100 多个任务 //TODO?

如何在 Firestore 中一次创建/更新多个文档