如何在mysql中同时修改多个表?

18

我试图修改多个表格并将 username VARCHAR列的大小更改为999,因为当前大小太小,现在一切都混乱了。 我该如何做到这一点?

我尝试过以下方法,并且对于一个表格它是有效的,但当尝试更新多个表格名称时返回错误:

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

我们能看到错误的详细信息吗? - JuSchz
你不能一个一个地做吗?或者写一个脚本来完成它? - jakx
@julesanchez 这是一个语法错误,但由于我正在处理很多表格,所以错误信息太长了。而且 @jakx 我想对每个表格进行 ALTER 操作,但好像无法完成。 - John Doe
也许你可以尝试使用2个表,并显示错误? - JuSchz
3个回答

10

你不能用单个查询完成此操作。你需要查询 information_schema 视图来获取要更改的表和列的列表。然后,你将使用得到的结果集创建 ALTER 查询(可以在外部应用程序/脚本中或在MySQL中使用游标和准备语句)。


我该如何查询 information_schema?你能给我一个例子吗? - John Doe
1
https://dev59.com/PXVC5IYBdhLWcg3ww0Dr#193860 - Ken

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

我随后能够轻松修改任何需要的表格。


这是 PHP 还是在查询中使用的函数? - Gagantous
1
@Gagantous 这绝对是 PHP,Raath 在 2012 年发布了这篇文章,所以他可能还没有使用 MySQLi。;-) - John

1
编写一个查询文件来修改所有表格并执行该文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接