2011-11-22 9 views
5

Cuando se utiliza el comando:¿Por qué MySQL usa una tabla temporal para soltar una clave principal?

ALTER TABLE my_table DROP PRIMARY KEY; 

El estado (cuando SHOW PROCESSLIST) aparece como:

copy to tmp table 

¿Por qué sería necesario utilizar una tabla tmp a "soltar" una restricción de clave primaria?

+0

"detalles de la implementación" ;-) Sospecho que los cambios en la agrupación de datos subyacentes, p. Ej. se mueve a un "montón" o de lo contrario se vuelven a agrupar en ese motor en particular? (InnoDB? MyISAM?) Dado que se trata de una operación DDL, y no una común, la "forma más simple" suele ser la "mejor manera", especialmente si puede reutilizar rutas de código bien probadas/verificadas. –

Respuesta

5

Considere el caso de una clave primaria compuesta. En este caso, el motor de DB debe crear un nuevo índice agrupado a partir de una clave sintética, que requerirá mover las filas. (Tenga en cuenta que las filas se ordenan físicamente en el disco mediante la clave principal.) Dada la rareza de esta situación, no vale la pena manejar el caso especial en el que su clave principal ya es un número entero.

Cuestiones relacionadas