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

ziluopao 发布于 2016/06/17 12:11
阅读 268
收藏 0

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


加载中
1
ziluopao
ziluopao

引用来自“ziluopao”的评论

引用来自“混元归一”的评论

本质上没有问题,但是jh库中没有33hao_activity表,你的语句修改如下,你在试试看;就是添加了先选中要修改的库use xxx;语句

SELECT CONCAT( 'use',table_schema,';','ALTER TABLE ', table_name, ' RENAME TO jh_', 
SUBSTRING(table_name,6 ),';' )
FROM information_schema.tables 
WHERE table_name LIKE '33hao_%';



条件在一楼都说了,好吧,再发一个数据库的结构图,一目了然

上面jh库中的表前缀33hao_我想改成jh_

就是这个目的,然后我百度了一下,用这个http://www.educity.cn/wenda/404373.html方法,但是不行,难道此人胡写的。要不怎么用它的办法不行呢

进一步百度才明白,原来让我这样复制数据库文件夹太危险了,原因如下

information_schema

在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库。 information_schema数据库是做什么用的呢,使用WordPress博客的朋友可能会想,是不是安装模板添加的数据库呀?看完本片文章 后,你就会对information_schema数据库有所了解。

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

0
pantrick
pantrick
Table 'jh.33hao_activity' doesn't exist
ziluopao
ziluopao
是啊,我就是问这个为什么
0
温安适
温安适

本质上没有问题,但是jh库中没有33hao_activity表,你的语句修改如下,你在试试看;就是添加了先选中要修改的库use xxx;语句

SELECT CONCAT( 'use',table_schema,';','ALTER TABLE ', table_name, ' RENAME TO jh_', 
SUBSTRING(table_name,6 ),';' )
FROM information_schema.tables 
WHERE table_name LIKE '33hao_%';



温安适
温安适
回复 @ziluopao : 你确定你数据库中有这张表? 报错能不能发下图
ziluopao
ziluopao
试了不行
0
ziluopao
ziluopao

引用来自“混元归一”的评论

本质上没有问题,但是jh库中没有33hao_activity表,你的语句修改如下,你在试试看;就是添加了先选中要修改的库use xxx;语句

SELECT CONCAT( 'use',table_schema,';','ALTER TABLE ', table_name, ' RENAME TO jh_', 
SUBSTRING(table_name,6 ),';' )
FROM information_schema.tables 
WHERE table_name LIKE '33hao_%';



条件在一楼都说了,好吧,再发一个数据库的结构图,一目了然

上面jh库中的表前缀33hao_我想改成jh_

就是这个目的,然后我百度了一下,用这个http://www.educity.cn/wenda/404373.html方法,但是不行,难道此人胡写的。要不怎么用它的办法不行呢

ziluopao
ziluopao
回复 @ziluopao : 沉痛的教训啊,顷刻之间成果化为乌有
ziluopao
ziluopao
回复 @混元归一 : 这是我百度到的: 你这个是innodb表,可见可能是ibdata1文件丢失或者损坏。 如果你是独立表空间还是可以恢复的,如果是共享表空间,则数据无法恢复喽。 查看此参数innodb_file_per_table
ziluopao
ziluopao
回复 @ziluopao : 点击复制过来的表出现这样的提示1146 - table '33hao1.33hao_admin_log' doesn't exist
ziluopao
ziluopao
回复 @混元归一 : 我知道原因了! 先说原委:我是这样备份网站的,直接把数据整个文件夹复制下来,也把www复制下来做为备份。后来又把mysql和php服务器程序卸载了,然后再装,接着把数据库文件夹和www直接复制过来,就出了问题,我感觉可能是安装数据库时,mysql记录了啥东西,而此东东没有了上次数据库的表结构了,所以出现了不能读表的问题,你知道此种情况如何解决吗
ziluopao
ziluopao
回复 @混元归一 : 右键中有一个链接另存为
下一页
0
ziluopao
ziluopao

@万杰:我把下面代码去掉,竟然行了,呵呵,不过总感觉判断不全面,你看一下

我去掉的代码

if (empty($bind_info))
                    {
                        $where['class_1'] =  0;
                        $where['class_2'] =  0;
                        $where['class_3'] =  0;
                        $bind_info = Model('store_bind_class')->getStoreBindClassInfo($where);
                        if (empty($bind_info))
                        {
                            showDialog(L('store_goods_index_again_choose_category2'));
                        }
                    }



返回顶部
顶部