Karena kunci asing harus cocok dengan tipe data kolom yang direferensikan, masuk akal jika mengubah tipe data kolom kemungkinan akan mengganggu kunci asing yang mereferensikannya.
Tampaknya MySQL memiliki perlindungan terhadap ini, dan menolak upaya untuk MENGUBAH kolom. Tapi itu tidak cukup pintar untuk memeriksa apakah modifikasi spesifik yang Anda buat sebenarnya akan mengubah tipe data. Itu hanya menolak setiap upaya untuk mengubah kolom itu.
Anda dapat mengatasinya dengan menonaktifkan pemeriksaan kunci asing untuk sementara. Saya membuat ulang tabel Anda dan mengonfirmasinya:
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;