Protože cizí klíče musí odpovídat datovému typu sloupce, na který odkazují, dává smysl, že změna datového typu sloupce pravděpodobně naruší cizí klíč, který na něj odkazuje.
Zdá se, že MySQL má proti tomu ochranu a popírá pokus o MODIFY sloupce. Není to ale dost chytré na to, abyste zkontrolovali, zda konkrétní úprava, kterou provádíte, skutečně změní datový typ. Pouze zamítne jakýkoli pokus o úpravu tohoto sloupce.
Můžete to obejít dočasným zakázáním kontrol cizích klíčů. Znovu jsem vytvořil váš stůl a potvrdil jsem to:
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;