Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中一次修改多个表?_Mysql_Alter - Fatal编程技术网

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

如何在mysql中一次修改多个表?,mysql,alter,Mysql,Alter,我试图更改多个表,并将usernameVARCHAR列的大小更改为999,因为它当前的大小太小,现在一切都搞砸了。我该怎么做 我尝试了以下方法,但在尝试更新多个表名时返回了错误: ALTER TABLE `TABLE_NAME` CHANGE `username` VARCHAR( 999 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL 一个查询是做不到的。您需要查询information\u schema视图以获得要更改的

我试图更改多个表,并将
username
VARCHAR列的大小更改为999,因为它当前的大小太小,现在一切都搞砸了。我该怎么做

我尝试了以下方法,但在尝试更新多个表名时返回了错误:

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

一个查询是做不到的。您需要查询
information\u schema
视图以获得要更改的表和列的列表。然后,您将使用生成的结果集创建
ALTER
查询(在外部应用程序/脚本中或在MySQL中使用游标和准备好的语句)

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

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

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

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

我们可以看到错误的详细信息吗?你不能一个接一个地执行此操作或编写脚本来执行此操作吗?@julesanchez这是一个语法错误,但由于我处理的表太多,因此错误太长。和@jakx我想为每个表
更改
,但似乎做不到。也许您可以尝试使用两个表,并显示错误?我如何查询
信息\u架构
?你能给我举个例子吗?这是php还是查询中使用的函数?@Gagantous这肯定是2012年发布的php和Raath,这可能是他还没有使用MySQLi的原因。;-)