sql >> Databáze >  >> RDS >> Mysql

ERROR 1833 (HY000):Nelze změnit sloupec MySQL

Protože cizí klíče musí odpovídat datovému typu sloupce, na který odkazují, dává smysl, že změna datového typu sloupce pravděpodobně naruší cizí klíč, který na něj odkazuje.

Zdá se, že MySQL má proti tomu ochranu a popírá pokus o MODIFY sloupce. Není to ale dost chytré na to, abyste zkontrolovali, zda konkrétní úprava, kterou provádíte, skutečně změní datový typ. Pouze zamítne jakýkoli pokus o úpravu tohoto sloupce.

Můžete to obejít dočasným zakázáním kontrol cizích klíčů. Znovu jsem vytvořil váš stůl a potvrdil jsem to:

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. MySQL - Kontrolujte, který řádek je vrácen skupinou

  2. kolejnice seřadit podle konkrétního pořadí

  3. Jak používat funkci IDENTITY() na serveru SQL Server

  4. Jak mohu protokolovat/sledovat volání uložených procedur Oracle s hodnotami parametrů?