Jenis dan definisi kolom kunci asing dan referensi harus sama. Ini berarti kunci asing Anda tidak mengizinkan perubahan jenis bidang Anda.
Salah satu solusinya adalah ini:
LOCK TABLES
favorite_food WRITE,
person WRITE;
ALTER TABLE favorite_food
DROP FOREIGN KEY fk_fav_food_person_id,
MODIFY person_id SMALLINT UNSIGNED;
Sekarang Anda dapat mengubah Anda person_id
ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
membuat ulang kunci asing
ALTER TABLE favorite_food
ADD CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id)
REFERENCES person (person_id);
UNLOCK TABLES;
EDIT:
Menambahkan kunci di atas, berkat komentar
Anda harus melarang penulisan ke database saat Anda melakukan ini, jika tidak, Anda berisiko mengalami masalah integritas data.
Saya telah menambahkan kunci tulis di atas
Semua pertanyaan penulisan di sesi lain selain sesi Anda sendiri ( INSERT, UPDATE, DELETE
) akan menunggu hingga batas waktu atau UNLOCK TABLES
; dieksekusi
http://dev.mysql.com/doc/refman/5.5/en/lock-tables.html
EDIT 2: OP meminta penjelasan yang lebih rinci tentang baris "Jenis dan definisi kolom kunci asing dan referensi harus sama. Ini berarti kunci asing Anda tidak mengizinkan perubahan jenis kolom Anda."
Dari Manual Referensi MySQL 5.5: Batasan KUNCI ASING
Kolom yang sesuai di foreign key dan referensi key harus memiliki tipe data internal yang sama di dalam InnoDB sehingga dapat dibandingkan tanpa konversi jenis. Ukuran dan tanda tipe integer harus sama. Panjang jenis string tidak harus sama. Untuk kolom string non-biner (karakter), kumpulan karakter dan pemeriksaan harus sama.