之前搜索“mysql语句批量修改表名”的时候大多数人给的代码就是
SELECT
CONCAT(
'ALTER TABLE ',
table_name,
' RENAME TO ',
REPLACE (
table_name,
'a0001', -- 要替换的字符串
'a001' -- 替换为新的字符串
),
';'
)
FROM
information_schema. TABLES
WHERE
TABLE_SCHEMA = 'byd2' -- 数据库名称
AND table_name LIKE '%a0001%'; -- 匹配表(匹配表名以包含a0001的表)
这里CONCAT()是拼接函数,REPLACE()是替换函数,源代码复制使用的时候一直报错,说语句不对。后来发现当表名中含有中文字符或者括号()时,要特殊处理一下。
比如 原来修改表名的mysql语句:
alter table 原表名 rename to 新表名;
当表名含有中文字符或者括号()时改为
alter table `原表名` rename to `新表名`;
新加的这个符号和编程语言里面英文单引号类似
所以改了一下原代码
SELECT
CONCAT(
'ALTER TABLE `',
table_name,
'` RENAME TO `',
REPLACE (
table_name,
'a0001', -- 要替换的字符串
'a001' -- 替换为新的字符串
),
'`;'
)
FROM
information_schema. TABLES
WHERE
TABLE_SCHEMA = 'byd2' -- 数据库名称
AND table_name LIKE '%a0001%'; -- 匹配表(匹配表名以包含a0001的表)
小改。这是那位大佬的源代码链接http://t.csdn.cn/Lo50W