外部キーは、それらが参照する列のデータ型と一致する必要があるため、列のデータ型を変更すると、それを参照する外部キーが混乱する可能性があります。
MySQLにはこれに対する保護手段があり、列を変更する試みを拒否しているようです。ただし、行っている特定の変更によって実際にデータ型が変更されるかどうかを確認するのは賢明ではありません。その列を変更しようとする試みを拒否するだけです。
これを回避するには、外部キーチェックを一時的に無効にします。テーブルを再作成して確認しました:
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;