Mysql
 sql >> Database >  >> RDS >> Mysql

ERRORE 1833 (HY000):impossibile modificare la colonna MySQL

Poiché le chiavi esterne devono corrispondere al tipo di dati della colonna a cui fanno riferimento, è logico che la modifica del tipo di dati di una colonna possa alterare la chiave esterna a cui fa riferimento.

Sembra che MySQL abbia una protezione contro questo e nega un tentativo di MODIFICARE la colonna. Ma non è abbastanza intelligente per verificare se la modifica specifica che stai apportando cambierà effettivamente il tipo di dati. Nega semplicemente qualsiasi tentativo di modificare quella colonna.

Puoi aggirare questo problema disabilitando temporaneamente i controlli della chiave esterna. Ho ricreato la tua tabella e l'ho confermata:

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;