MySQL数据库将表字段为驼峰命名的字段更改为小写加下划线格式的字段的SQL脚本
MySQL数据库将表字段为驼峰命名的字段更改为小写加下划线格式的字段的SQL脚本
·
CREATE DEFINER=`my_db`@`%` PROCEDURE `ChangeTableColumnName`(
in in_table_name varchar(255)
)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE tableName VARCHAR(1000);
DECLARE columnName VARCHAR(1000);
DECLARE newColumnName VARCHAR(1000);
DECLARE newColumnName2 VARCHAR(1000);
DECLARE columnType VARCHAR(1000);
DECLARE columnComment VARCHAR(1000);
DECLARE cur CURSOR FOR
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE,COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
and table_name = in_table_name
;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO tableName, columnName, columnType,columnComment;
IF done THEN
LEAVE read_loop;
END IF;
set newColumnName = columnName;
#先看首字母要不要改
IF ASCII(SUBSTRING(columnName,1,1)) BETWEEN 65 AND 90 THEN
#首字母转小写
call LowercaseFirstLetter(columnName,newColumnName);
SET @sql = CONCAT('ALTER TABLE `', tableName, '` CHANGE `', columnName, '` `', newColumnName, '` ', columnType);
if columnComment is not null && columnComment != '' then
set @sql = concat(@sql,' COMMENT \'',columnComment,'\'');
end if;
-- 执行ALTER TABLE语句
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
-- 再将驼峰命名转换为下划线命名
call ToLowercaseWithUnderscore(newColumnName,newColumnName2);
#select newColumnName,newColumnName2,newColumnName != newColumnName2;
-- 检查是否需要重命名,如果只是这小写不同,还需要识别下阿斯克码
IF (newColumnName != newColumnName2)
or ASCII(SUBSTRING(newColumnName,1,1)) != ASCII(SUBSTRING(newColumnName2,1,1)) THEN
SET @sql = CONCAT('ALTER TABLE `', tableName, '` CHANGE `', newColumnName, '` `', newColumnName2, '` ', columnType);
if columnComment is not null && columnComment != '' then
set @sql = concat(@sql,' COMMENT \'',columnComment,'\'');
end if;
-- 执行ALTER TABLE语句
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END LOOP;
CLOSE cur;
#最后改下表格的字符集
SET @sql = CONCAT('ALTER TABLE `', tableName,
'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci');
-- 执行ALTER TABLE语句
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
更多推荐




所有评论(0)