开发者社区 问答 正文

这样写替换表前缀的句子哪里有问题:报错

 

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,直接拷入数据库服务器)


展开
收起
kun坤 2020-06-14 09:11:43 566 分享 版权
阿里云 AI 助理回答

从你提供的错误信息来看,问题在于尝试重命名的表在执行ALTER语句时系统找不到。错误提示Table 'jh.33hao_activity' doesn't exist意味着在数据库jh中并没有名为33hao_activity的表。

这里有几个可能的原因和解决方法:

  1. 表名大小写敏感:不同的数据库系统对表名的大小写敏感度不同。确认你的数据库管理系统(如MySQL)是否区分表名的大写和小写。如果区分,确保你的表名大小写与实际完全一致。

  2. 数据库或表名拼写错误:虽然看起来直接从查询结果生成的SQL命令应该不会错,但还是建议手动检查生成的ALTER语句中的表名是否完全正确,包括是否有意外的空格或者特殊字符。

  3. 表已被移动或删除:如果你是在生成ALTER语句之后、执行之前的一段时间内操作了数据库,有可能是表已经被其他操作移动或删除了。

  4. 权限问题:确保当前执行ALTER语句的用户拥有足够的权限来修改表结构,包括重命名表。

  5. 数据库连接问题:确认你的SQL客户端或应用程序连接的是正确的数据库实例,有时候可能会因为配置错误连接到了不同的数据库上,导致找不到表。

  6. 表前缀处理问题:在你的SQL脚本中,使用了substring(table_name,6 )来去掉前缀并添加新前缀。确保所有表名的长度都足够长,以便这个操作不会导致生成无效的表名。例如,如果某个表名不足6个字符,这将导致生成的表名不正确。

针对你的具体场景,可以尝试以下步骤: - 手动检查数据库中确实存在以33hao_为前缀的表。 - 确认执行SQL的用户权限。 - 检查生成的ALTER语句,特别是表名部分,看是否有异常。 - 如果可能,尝试在数据库管理工具中直接执行一两个ALTER语句,而不是批量执行,以便更精确地定位问题所在。

希望这些建议能帮助你解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: