Eftersom främmande nycklar måste matcha datatypen för den kolumn de refererar till, är det rimligt att ändra datatypen för en kolumn sannolikt kommer att rubba den främmande nyckeln som refererar till den.
Det verkar som att MySQL har ett skydd mot detta och förnekar ett försök att MODIFIERA kolumnen. Men det är inte smart nog att kontrollera om den specifika ändringen du gör faktiskt kommer att ändra datatypen. Den förnekar bara alla försök att ändra den kolumnen.
Du kan undvika detta genom att tillfälligt inaktivera kontroller av främmande nyckel. Jag återskapade ditt bord och bekräftade det:
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;