gpt4 book ai didi

MySQL 在创建表时替换列类型

转载 作者:行者123 更新时间:2023-11-30 01:23:48 27 4
gpt4 key购买 nike

我正在运行 MySQL 服务器,一切都很好,但现在我正在运行一个应用程序,它时不时地创建表。

应用程序正在创建表,其中一个(或多个)列被定义为tinyint(3)。出于遗留目的,我希望将这些表定义为smallint(5)。

作为一种解决方法,我现在每分钟运行一个脚本,将tinyint(3) 列的单个实例替换为smallint(5) 列。

    select @a := CONCAT('ALTER TABLE myDatabase.`', table_name, '` CHANGE `', column_name, '` `', column_name, '` SMALLINT( 5 ) UNSIGNED NOT NULL;') qry from information_schema.columns
where table_schema = 'myDatabase'
and column_type like '%tinyint%'
order by table_name,ordinal_position
;
PREPARE stmt FROM @a;
EXECUTE stmt;

缺点之一是该脚本一次仅修改一个列,如果没有 tinyint 列,则会产生错误。

是否没有一些更优雅的方法将tinyint(3)列替换为smallint(5)列?

谨致问候,马塞尔

最佳答案

您至少可以修复错误:

set @a := '';
select @a := CONCAT('ALTER TABLE myDatabase.`', table_name, '` CHANGE `', column_name, '` `',
column_name, '` SMALLINT( 5 ) UNSIGNED NOT NULL;') qry
from information_schema.columns
where table_schema = 'myDatabase'
and column_type like '%tinyint%'
order by table_name, ordinal_position
limit 1;

if @a <> ''
then
PREPARE stmt FROM @a;
EXECUTE stmt;
end if;

通过更多的工作,您可以使用一个 alter 语句更改单个表中的所有列,但这种努力可能不值得。

关于MySQL 在创建表时替换列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com