Если вы хотите изменить все столбцы определенного типа на другой тип, вы можете сгенерировать запросы, используя такой запрос:
select distinct concat('alter table ',
table_name,
' modify ',
column_name,
' <new datatype> ',
if(is_nullable = 'NO', ' NOT ', ''),
' NULL;')
from information_schema.columns
where table_schema = '<your database>'
and column_type = '<old datatype>';
Например, если вы хотите изменить столбцы с tinyint(4)
на bit(1)
, запустите его так:
select distinct concat('alter table ',
table_name,
' modify ',
column_name,
' bit(1) ',
if(is_nullable = 'NO', ' NOT ', ''),
' NULL;')
from information_schema.columns
where table_schema = 'MyDatabase'
and column_type = 'tinyint(4)';
и получите вывод, подобный этому:
alter table table1 modify finished bit(1) NOT NULL;
alter table table2 modify canItBeTrue bit(1) NOT NULL;
alter table table3 modify canBeNull bit(1) NULL;
!! Не сохраняет уникальные ограничения, но должен быть легко исправлен с помощью другого if
-параметра к concat
. Я оставлю это на усмотрение читателя, чтобы реализовать это при необходимости.