Изменить несколько типов полей одновременно в MySQL - PullRequest
1 голос
/ 28 октября 2011

У меня есть таблица (она была импортирована из Excel), которая имеет широкий спектр автоматически идентифицированных / назначенных типов (int, float, decimal и т. Д.). Есть около 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'   

Я только что создал этот синтаксис ... я знаю, что он нигде не близок.

Можно ли это сделать?

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Итак ... основываясь на «ответе» 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);
    }
}

Надеюсь, это когда-нибудь поможет кому-то еще.

0 голосов
/ 11 октября 2014

Чистый ответ SQL на это будет:

ALTER TABLE [table_name]
MODIFY [col1] float,
MODIFY [col2] varchar(255) null

и так далее ...

...