有没有办法可以改变列名的情况。我需要这样做,因为我有几个表,其中一些表的列名全部为大写,其中一些列的名称全部为小写,或者表有大写和小写列名称的组合。
任何输入都会有很大的帮助。
谢谢, 玛纳斯
答案 0 :(得分:2)
您可以使用ALTER TABLE
重命名表格,并从information_schema.columns
中选择以获取您不想要的任何命名方案的列。将这些与动态SQL(您可以将PREPARE
用于此目的)或脚本组合以生成和执行SQL语句。但是,SQL通常不区分大小写,因此这些更改将是装饰性的。
生成列重命名查询的未经测试的示例(生成的查询可能会删除列属性):
-- before use:
-- * change regexp to match columns to rename
-- * change collation to match table/column default
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name,
'` CHANGE `', column_name, '` `', LOWER(column_name), '` ', column_type,
IF(IS_NULLABLE='NO',' NOT NULL',''),
IF(column_default <> '', CONCAT(' DEFAULT ', column_default), ''),
' ', extra )
FROM information_schema.columns
WHERE column_name REGEXP '^[A-Z]' COLLATE utf8_bin
AND table_schema <> 'information_schema';
-- or:
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name,
'` CHANGE `', column_name, '` `', LOWER(column_name), '` ', column_type,
IF(IS_NULLABLE='NO',' NOT NULL',''),
IF(column_default <> '', CONCAT(' DEFAULT ', column_default), ''),
' ', extra )
FROM information_schema.columns
WHERE LEFT(column_name, 1) = UPPER(LEFT(column_name,1)) COLLATE utf8_bin
AND table_schema != 'information_schema';