日期:2014-05-16  浏览次数:20638 次

线上从库服务器临时表报错如下,有碰到么,share下解决方法!
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 4:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_a45f56_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'
120529 7:10:04 [Warning] Invalid (old?) table or database name '#sql7a34_ab74b1_2'


自己写了一个脚本,抓到这2个时间点执行sql如下:


$sql = "insert into product_xxxxxxx(select * from product_inventory_xxxxxxx)";

product_inventory_xxxxxxx这个是临时表;
在insert之前有如下sql:

1 CREATE TEMPORARY TABLE `product_inventory_xxxxxxx` ".$table_structure;

2 然后是一堆insert,upate,大概有15条左右吧。

3 insert into product_xxxxxxx(select * from product_inventory_xxxxxxx)";

在1和2的时候,没有报错,在3的时候报错了,而且报错之后3还在执行,大概需要70秒执行完毕。


------解决方案--------------------
你的SQL语句是什么
假设结构一致
insert into product_xxxxxxx select * from product_inventory_xxxxxxx

product_inventory_xxxxxxx

TEMPORARY不能重复打开
------解决方案--------------------
临时表有限制:
在同一个query语句中,你只能查找一次临时表。例如:下面的就不可用

  mysql> SELECT * FROM temp_table, temp_table AS t2;

  ERROR 1137: Can't reopen table: 'temp_table'

  如果在一个存储函数里,你用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,这个错误都会发生。
------解决方案--------------------
所以要检查一下你的SQL语句、SP、UDF之类的
------解决方案--------------------
把你的语句直接在MYSQL的命令行工具下试一下。