Dos tablas con el mismo nombre en MySQL

8

Hoy tuve este problema extraño cuando dejé caer una tabla temporal. Dejé caer la tabla temporal y descifré la tabla solo para verificar. Pero, la mesa no se dejó caer. Después de algunas búsquedas encontré que:

MySQL permite crear una tabla temporal con el mismo nombre que una tabla permanente. Entonces la tabla temporal se cayó y no la tabla permanente. Realmente me confundí con qué mesa estoy trabajando.

Versión de MySQL: 5.1.36-enterprise-gpl-pro-log

Esto es lo que probé:

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

¿Es esto un error o hay una forma alternativa de superar esto?

BALA
fuente

Respuestas:

6

MySQL le permite crear una tabla temporal con un nombre existente porque no tienen el mismo "alcance". Una tabla temporal es visible solo en la sesión y se descarta al finalizar la sesión. Si tiene el mismo nombre, MySQL "oculta" la tabla original hasta que suelte su tabla temporal.

Puede consultar la sección Tablas temporales en la documentación de MySQL

Max.

Maxime Fouilleul
fuente
1
¿Qué sucede si necesito insertar algunos registros en la tabla permanente cuando tengo una tabla temporal con el mismo nombre que la tabla permanente en la misma sesión?
BALA
Simplemente no puedes. Debe anteponer su tabla o buscar un nombre diferente.
Maxime Fouilleul
1
@BALA, Desde las tablas temporales no tienen que existir en una base de datos "real", sólo tiene que ponerlos en una base de datos de "falso", por ejemplo: create temporary table fake_db.t as select*from t.
Pacerier
1

Del manual ( CREAR TABLA ):

Una tabla TEMPORAL solo es visible para la sesión actual y se descarta automáticamente cuando se cierra la sesión. Esto significa que dos sesiones diferentes pueden usar el mismo nombre de tabla temporal sin entrar en conflicto entre sí o con una tabla no TEMPORAL existente del mismo nombre. (La tabla existente está oculta hasta que se descarta la tabla temporal).

Eso significa que después de crear una tabla temporal con el mismo nombre que alguna tabla existente, no puede acceder a la tabla normal con ese nombre, sino solo a la temporal (durante esa sesión). Si cree que se abre espacio para un error, use un nombre diferente para la tabla temporal (por ejemplo, use el prefijo temp_), eso es simple y no deja espacio para la confusión.

tallo
fuente
0

Has respondido esta pregunta en la primera. Usted no " necesidad de insertar registros en una tabla permanente ... mismo nombre .... tabla temporal ... misma sesión" porque usted tiene control sobre los nombres de las tablas!

Simplemente asegúrese de que a la tabla temporal se le dé un prefijo / sufijo tmp _ / _ tmp o similar, ya que esto evita cualquier confusión (según lo mencionado por @SpeedyGonsales).

Si está cometiendo este tipo de error ahora, ¡piense lo fácil que será hacer que alguien nuevo en el sistema en un año! Su organización (¡incluso si es solo usted!) Debería tener una convención de nomenclatura , de lo contrario obtendrá este tipo de SNAFU .

Vérace
fuente