Aunque está suficientemente explicado en la ayuda de MySql, lo pongo aquí porque el mensaje de error es bastante críptico e induce a error. Al intentar hacer algo como
alter table nombre_tabla drop primary key;
Obtenemos el siguiente error:
Error on rename of '.ejercicio_9#sql-b8_c' to '.ejercicio_9nombre_tabla' (errno: 150) ErrorNr. 1025
Pues bien, aunque no lo parezca este error nos indica que la tabla nombre_tabla está siendo referenciada por otra tabla. En otras palabras, hemos establecido un clave ajena sobre esa tabla. No tiene que ver ni con permisos, ni con bloqueos ni con cosas así.
Para solucionarlo, debemos primero eliminar esas claves ajenas definidas. Una forma de verlas es con la sentencia sql
SELECT ke.referenced_table_name parent, ke.table_name child, ke.constraint_nameFROM information_schema.KEY_COLUMN_USAGE keWHERE ke.referenced_table_name IS NOT NULLORDER BY ke.referenced_table_name;
(Tomado de los comentarios de la ayuda de MySql).
Así salen todas, para sacar las que nos causan problemas, añadir al where
and ke.referenced_table_name='nombre_tabla'
En las child, hacemos un
alter table nombre_tabla_child drop foreign key constraint_name;
Y ya podemos trabajar sin el error.