mysql - 在 MySQL 中同时更改多个字段类型

标签 mysql alter-table

我有一个表(它是从 Excel 导入的),其中包含各种自动识别/分配的类型(整数、 float 、小数等)。大约有 160 列...我想将它们标准化。我知道要更改字段类型,我使用 ALTER TABLE 和 CHANGE 命令...但是您必须指定列名...而且我真的不想为每一列单独执行此操作。我试过这样的事情:

ALTER TABLE `Table_Name` CHANGE * * DECIMAL( 7, 4 ) NULL DEFAULT NULL 

但这没有用。使事情稍微复杂一点……实际上有一个字段是主键 StateName,它不是数字(值类似于 TX、VA、FL、NY)……我做需要别管它。

简而言之,我正在寻找类似的东西:

ALTER TABLE `Table_Name` CHANGE * * DECIMAL( 7, 4 ) NULL DEFAULT NULL EXCEPT WHERE Column='StateName'   

我只是编造了那个语法......我知道它离得很远。

这可以做到吗?

最佳答案

所以...基于来自 OMG Ponies 的“答案”并假设在 MySQL 中确实没有办法做到这一点...我编写了以下 PHP 脚本,它在不到 1 秒的时间内完成了整个工作。 ..

$sql = "SHOW COLUMNS FROM `Table_Name`";
$result = @mysql_query($sql, $db);
while($row = mysql_fetch_array($result)){
    $ColumnName = $row[0];
    if($ColumnName!='StateName'){
        $UpdateSql = "ALTER TABLE `Table_Name` CHANGE `$ColumnName` `$ColumnName` DECIMAL( 7, 4 ) NULL DEFAULT NULL ";
        @mysql_query($UpdateSql, $db);
    }
}

希望有一天它能帮助到其他人。

关于mysql - 在 MySQL 中同时更改多个字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7925210/

相关文章:

mysql - 0 io 密集型应用程序上的 iowait。我的cpu用了什么时间?

java - 使用 CrudRepository 将 ZonedDateTime 转换为 MySQL 时间戳

mysql - 如何在一个巨大的 MYSQL 数据库表中插入一个新列?

mysql - `MODIFY COLUMN` 与 `CHANGE COLUMN`

MySQL:找到搜索字符串的字段列表?

php - 使用 PHP 从 SQL 查询创建一个没有重复行的 HTML 表?

php - 使用 MpAndroid 库库从 MYSQL 获取的数据在 android 上创建图表

mysql - 有人使用 pt-online-schema-change 来更改包含 1x 百万个条目的表吗?

oracle - 在负载下添加具有默认值的列的最佳方法

MySQL ALTER 列到表中的最后一个位置