Recebi esse problema estranho hoje quando deixei cair uma mesa temporária. Larguei a mesa temporária e desci a mesa apenas para verificar. Mas, a mesa não foi descartada. Após algumas pesquisas, descobri que:
O MySQL permite criar uma tabela temporária com o mesmo nome que uma tabela permanente. Portanto, a tabela temporária caiu e não a tabela permanente. Fiquei realmente confuso com a tabela em que estou trabalhando.
Versão do MySQL: 5.1.36-enterprise-gpl-pro-log
Isto é o que eu testei:
mysql> create table test(id int);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
id int(11) YES NULL
mysql> create temporary table test(id int);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
id int(11) YES NULL
mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------
id int(11) YES NULL
Isso é um bug ou existe uma maneira alternativa de superar isso?
create temporary table fake_db.t as select*from t
.No manual ( CREATE TABLE ):
Isso significa que, depois de criar uma tabela temporária com o mesmo nome de alguma tabela existente, você não pode acessar a tabela normal com esse nome, mas apenas a temporária (durante a sessão). Se você acha que isso abre espaço para um erro, use um nome diferente para a tabela temporária (por exemplo, use prefixo
temp_
) - isso é simples e não deixa espaço para confusão.fonte
Você respondeu a esta pergunta no seu primeiro. "Você não precisa inserir registros em uma tabela permanente ... mesmo nome ... tabela temporária ... mesma sessão" porque você tem controle sobre os nomes das tabelas!
Você simplesmente garante que a tabela temporária receba um prefixo / sufixo tmp _ / _ tmp ou semelhante, pois isso evita qualquer confusão (conforme referido por @SpeedyGonsales).
Se você está cometendo esse tipo de erro agora, pense em como será fácil para alguém novo no sistema daqui a um ano! Sua organização (mesmo que seja apenas você!) Deve ter uma convenção de nomes , caso contrário, você recebe esse tipo de SNAFU .
fonte