चूंकि विदेशी कुंजियों को उनके द्वारा संदर्भित कॉलम के डेटा प्रकार से मेल खाना चाहिए, यह समझ में आता है कि किसी कॉलम के डेटा प्रकार को बदलने से उस विदेशी कुंजी को परेशान करने की संभावना है जो इसे संदर्भित करती है।
ऐसा लगता है कि 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;