Select CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO jh_', substring(table_name,6 ),';' )FROM information_schema.tables Where table_name LIKE '33hao_%';
想把数据库名为jh中的表前缀为33hao_的换成前缀为jh_
执行上面的代码后ALTER 出很多句子,但在执行这些ALTER句子时出现错误,如下
[SQL]ALTER TABLE 33hao_activity RENAME TO jh__activity;
[Err] 1146 - Table 'jh.33hao_activity' doesn't exist
不知哪里写错了
(数据库,下载后后缀改成rar,直接拷入数据库服务器)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你提供的错误信息来看,问题在于尝试重命名的表在执行ALTER语句时系统找不到。错误提示Table 'jh.33hao_activity' doesn't exist
意味着在数据库jh
中并没有名为33hao_activity
的表。
这里有几个可能的原因和解决方法:
表名大小写敏感:不同的数据库系统对表名的大小写敏感度不同。确认你的数据库管理系统(如MySQL)是否区分表名的大写和小写。如果区分,确保你的表名大小写与实际完全一致。
数据库或表名拼写错误:虽然看起来直接从查询结果生成的SQL命令应该不会错,但还是建议手动检查生成的ALTER语句中的表名是否完全正确,包括是否有意外的空格或者特殊字符。
表已被移动或删除:如果你是在生成ALTER语句之后、执行之前的一段时间内操作了数据库,有可能是表已经被其他操作移动或删除了。
权限问题:确保当前执行ALTER语句的用户拥有足够的权限来修改表结构,包括重命名表。
数据库连接问题:确认你的SQL客户端或应用程序连接的是正确的数据库实例,有时候可能会因为配置错误连接到了不同的数据库上,导致找不到表。
表前缀处理问题:在你的SQL脚本中,使用了substring(table_name,6 )
来去掉前缀并添加新前缀。确保所有表名的长度都足够长,以便这个操作不会导致生成无效的表名。例如,如果某个表名不足6个字符,这将导致生成的表名不正确。
针对你的具体场景,可以尝试以下步骤: - 手动检查数据库中确实存在以33hao_
为前缀的表。 - 确认执行SQL的用户权限。 - 检查生成的ALTER语句,特别是表名部分,看是否有异常。 - 如果可能,尝试在数据库管理工具中直接执行一两个ALTER语句,而不是批量执行,以便更精确地定位问题所在。
希望这些建议能帮助你解决问题。