Я получил эту странную проблему сегодня, когда уронил временный стол. Я удалил временную таблицу и удалил ее, чтобы проверить. Но стол не упал. После некоторых поисков я обнаружил, что:
MySQL позволяет создать временную таблицу с тем же именем, что и постоянная таблица. Таким образом, временная таблица была удалена, а не постоянная таблица. Я действительно запутался, за каким столом я работаю.
Версия MySQL: 5.1.36-enterprise-gpl-pro-log
Вот что я проверял:
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
Это ошибка или есть альтернативный способ преодолеть это?
create temporary table fake_db.t as select*from t
.Из руководства ( CREATE TABLE ):
Это означает, что после создания временной таблицы с тем же именем, что и у некоторой существующей таблицы, вы не можете получить доступ к обычной таблице с таким именем, но только к временной (во время этого сеанса). Если вы думаете, что это открывает место для ошибки, используйте другое имя для временной таблицы (например, используйте префикс
temp_
) - это просто и не оставляет места для путаницы.источник
Вы ответили на этот вопрос в своем первом. Вам не нужно " вставлять записи в постоянную таблицу ... с тем же именем .... во временную таблицу ... с тем же сеансом", потому что вы можете контролировать имена таблиц!
Вы просто гарантируете, что временная таблица получает префикс / суффикс tmp _ / _ tmp или аналогичный, так как это позволяет избежать путаницы (на что ссылается @SpeedyGonsales).
Если вы делаете такую ошибку сейчас, просто подумайте, как легко будет сделать для кого-то новичка в системе через год! Ваша организация (даже если это только вы!) Должна иметь соглашение об именах , в противном случае вы получите SNAFU такого рода .
источник