sql >> Database >  >> RDS >> Mysql

FOUT 1833 (HY000):Kan kolom MySQL niet wijzigen

Omdat externe sleutels moeten overeenkomen met het gegevenstype van de kolom waarnaar ze verwijzen, is het logisch dat het wijzigen van het gegevenstype van een kolom de externe sleutel die ernaar verwijst waarschijnlijk zal verstoren.

Het lijkt erop dat MySQL hier een beveiliging tegen heeft, en ontkent een poging om de kolom te WIJZIGEN. Maar het is niet slim genoeg om te controleren of de specifieke wijziging die u aanbrengt, ook het gegevenstype zal veranderen. Het ontkent gewoon elke poging om die kolom te wijzigen.

U kunt dit omzeilen door het controleren van buitenlandse sleutels tijdelijk uit te schakelen. Ik heb je tafel opnieuw gemaakt en bevestigd:

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;


  1. Geneste relaties met Sequelize

  2. Systeemkolommen in PostgreSQL begrijpen

  3. MySQL de waarde AUTO_INCREMENT ingesteld op MAX(id) + 1 snelkoppeling?

  4. geef sql-bestand door aan nodejs voor uitvoering als geheel