Omdat externe sleutels moeten overeenkomen met het gegevenstype van de kolom waarnaar ze verwijzen, is het logisch dat het wijzigen van het gegevenstype van een kolom de externe sleutel die ernaar verwijst waarschijnlijk zal verstoren.
Het lijkt erop dat MySQL hier een beveiliging tegen heeft, en ontkent een poging om de kolom te WIJZIGEN. Maar het is niet slim genoeg om te controleren of de specifieke wijziging die u aanbrengt, ook het gegevenstype zal veranderen. Het ontkent gewoon elke poging om die kolom te wijzigen.
U kunt dit omzeilen door het controleren van buitenlandse sleutels tijdelijk uit te schakelen. Ik heb je tafel opnieuw gemaakt en bevestigd:
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;