изменение типа данных во всей базе данных

По ошибке я создал свои таблицы с типом данных int(200), varchar(200), double(200,2) в MySQL. Теперь я хочу изменить его на int(20), varchar(20), double(20,2). Поскольку база данных очень большая, менять их по одному — очень сложная задача. Я не уверен, но я думаю, что следующий SQL может это сделать -

UPDATE INFORMATION_SCHEMA.COLUMNS
SET COLUMN_TYPE='INT(20)'
WHERE COLUMN_TYPE='INT(200)'
  AND TABLE_SCHEMA = 'DATABASE_NAME';

Решит ли это мою проблему и безопасно ли это делать?

Заранее спасибо.


person Denial    schedule 05.04.2014    source источник
comment
Я был бы удивлен, если бы вы могли обновить представление information_schema. Но MySQL меня не раз удивлял.   -  person Mike Sherrill 'Cat Recall'    schedule 05.04.2014
comment
Сначала кто-нибудь, скажите мне, неправильно ли использовать int(200), varchar(200), double(200,2)????????   -  person Denial    schedule 05.04.2014
comment
int(200) задает целое число с шириной отображения 200 цифр. Ширина отображения не влияет на диапазон значений, которые вы можете хранить в целом числе. double(200, 2) означает хранить числа с плавающей запятой до 200 цифр, из которых 2 могут быть справа от десятичной точки. Это действительно влияет на то, что вы можете хранить в двойнике; double(5,0) запрещает, например, 123456. Использование 200 повсюду говорит мне, что вы не знаете, что делают эти значения, и вы не читали документы.   -  person Mike Sherrill 'Cat Recall'    schedule 06.04.2014
comment
А как насчет varchar(200)???   -  person Denial    schedule 06.04.2014
comment
Вы видели конец того, что я написал выше? Использование 200 повсюду говорит мне, что вы не знаете, что делают эти значения, и вы не читали документы. Если вы хотите произвести хорошее впечатление, используйте поисковые системы и ознакомьтесь с документацией. .   -  person Mike Sherrill 'Cat Recall'    schedule 06.04.2014


Ответы (2)


ALTER TABLE имя_таблицы CHANGE имя_столбца1 имя_столбца2 INT(20) ;

он должен работать.

Примечание:Collumn_name2 — это новое имя столбца, если вы не хотите менять его имя, введите то же имя столбца.

person N.Be    schedule 05.04.2014
comment
это может помочь: stackoverflow.com /вопросы/4822638/ - person N.Be; 05.04.2014

Итак, ребята

Я не собираюсь ничего менять в своей базе данных, потому что после прочтения документации я считаю, что нет ничего плохого в использовании int(200), double(200,2), varchar(200) и это не доставит мне проблем согласно моим требованиям.

Тем не менее я хочу добавить одно решение для моего первоначального вопроса:

мы можем написать php-скрипт для изменения типа данных во всей базе данных вместе со следующим кодом:

$loop2=$con->query("SELECT COLUMN_NAME, TABLE_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'database_name' AND COLUMN_TYPE = 'int(200)'");

    while ($row2 =mysqli_fetch_array($loop2))
    {
         $row1=$con->query("alter table database_name.$row2[TABLE_NAME] change column $row2[COLUMN_NAME] $row2[COLUMN_NAME] int(20) default '$row2[COLUMN_DEFAULT]'");

    }
person Denial    schedule 06.04.2014