Mysql
 sql >> Baza danych >  >> RDS >> Mysql

BŁĄD 1833 (HY000):Nie można zmienić kolumny MySQL

Ponieważ klucze obce muszą pasować do typu danych kolumny, do której się odwołują, sensowne jest, aby zmiana typu danych kolumny prawdopodobnie zakłóciła klucz obcy, który się do niej odwołuje.

Wygląda na to, że MySQL ma przed tym zabezpieczenie i zaprzecza próbie modyfikacji kolumny. Ale nie jest wystarczająco sprytne, aby sprawdzić, czy konkretna modyfikacja, którą wprowadzasz, faktycznie zmieni typ danych. Po prostu zaprzecza jakiejkolwiek próbie modyfikacji tej kolumny.

Możesz obejść ten problem, tymczasowo wyłączając sprawdzanie kluczy obcych. Odtworzyłem Twój stół i potwierdziłem 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring Boot nie może połączyć się z MySQL i kończy pracę w Docker/Docker compose

  2. 4 sposoby na wyświetlenie listy wszystkich tabel w bazie danych MySQL

  3. Replikacja MySQL na pojedynczym serwerze

  4. java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z

  5. Limit czasu opróżniania Debezium i błędy OutOfMemoryError w MySQL