批量修改mysql 字段类型

转载 https://blog.csdn.net/yangjiegang8/article/details/79605436

delimiter //
DROP PROCEDURE
IF EXISTS batch_alter_column_type ; CREATE PROCEDURE batch_alter_column_type (
tbl_name VARCHAR (128), -- 表名
from_col_type VARCHAR (32), -- 修改之前的字段类型
to_col_type VARCHAR (32) -- 修改之后的字段类型
)
BEGIN


DECLARE col_name VARCHAR (128); -- 当前字段名
DECLARE i_done INT (1) ; -- 游标结束标记
DECLARE SQL_FOR_ALTER VARCHAR (1024) ;
DECLARE mycursor CURSOR FOR SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA. COLUMNS
WHERE
CONVERT (TABLE_NAME USING utf8) COLLATE utf8_bin = CONVERT (tbl_name USING utf8) -- 字符串类型转换
AND CONVERT (data_type USING utf8) COLLATE utf8_bin IN (from_col_type) ; 
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET i_done = 1 ; 
OPEN mycursor ; 
exe_loop : -- 自定义loop名
LOOP
FETCH mycursor INTO col_name ;
IF i_done = 1 THEN
LEAVE exe_loop ;
END
IF ;
SET SQL_FOR_ALTER = CONCAT(
"ALTER TABLE ",
tbl_name,
" MODIFY COLUMN ",
col_name,
" ",
to_col_type
) ; -- 拼接SQL 
SET @SQL = SQL_FOR_ALTER ; 
PREPARE stmt
FROM
@SQL ; EXECUTE stmt ; -- 执行SQL
SET i_done = 0 ; -- 重置标记
END LOOP; 
CLOSE mycursor ;
END//


-- 例子
-- 建表
DROP TABLE
IF EXISTS `tbcountdetail` ; CREATE TABLE `tbcountdetail` (
`id` INT (11) NOT NULL,
`batch` VARCHAR (10) DEFAULT NULL,
`organId` VARCHAR (10) DEFAULT NULL,
`facId` VARCHAR (10) DEFAULT NULL,
`model` VARCHAR (10) DEFAULT NULL,
`serialNo` VARCHAR (10) DEFAULT NULL,
`status` VARCHAR (10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci ; -- 执行
CALL batch_alter_column_type (
'tbcountdetail',
'varchar',
'int(10)'
) ;
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值