Mysql
 sql >> Datenbank >  >> RDS >> Mysql

FEHLER 1833 (HY000):MySQL-Spalte kann nicht geändert werden

Da Fremdschlüssel mit dem Datentyp der Spalte übereinstimmen müssen, auf die sie verweisen, macht es Sinn, dass das Ändern des Datentyps einer Spalte wahrscheinlich den Fremdschlüssel stört, der sie referenziert.

Es scheint, dass MySQL einen Schutz dagegen hat und einen Versuch ablehnt, die Spalte zu MODIFY. Aber es ist nicht schlau genug zu prüfen, ob die spezifische Änderung, die Sie vornehmen, tatsächlich den Datentyp ändert. Es verweigert lediglich jeden Versuch, diese Spalte zu ändern.

Sie können dies umgehen, indem Sie die Fremdschlüsselprüfung vorübergehend deaktivieren. Ich habe Ihre Tabelle neu erstellt und bestätigt:

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;