sql >> Base de Datos >  >> RDS >> Mysql

ERROR 1833 (HY000):No se puede cambiar la columna MySQL

Debido a que las claves externas deben coincidir con el tipo de datos de la columna a la que hacen referencia, tiene sentido que cambiar el tipo de datos de una columna probablemente altere la clave externa que hace referencia a ella.

Parece que MySQL tiene una protección contra esto y niega un intento de MODIFICAR la columna. Pero no es lo suficientemente inteligente como para verificar si la modificación específica que está realizando de hecho cambiará el tipo de datos. Simplemente niega cualquier intento de modificar esa columna.

Puede solucionar esto deshabilitando temporalmente las comprobaciones de clave externa. Recreé tu tabla y la confirmé:

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
ERROR 1833 (HY000): Cannot change column 'person_id': used in a foreign key constraint 'favorite_food_ibfk_1' of table 'test.favorite_food'

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> set foreign_key_checks=1;