2012-02-04 22 views
5

Şu anda masadaki depolama türü innodb, sadece MYISAM motorda mümkün olan tabloda tam metin araması eklemek istiyorum. Ben komutunu =>alter table film engine = myisam; kullanmayı denedim ve hata var:Mysql tablosunun depolama motorunun değiştirilmesi

1217 - Cannot delete or update a parent row: a foreign key constraint fails 

Yardım Lütfen !! Teşekkürler.

tablo için yabancı anahtar kısıtlamalarını tanımla:

+0

Kaldır. Ancak, metin alanınız yerine başka bir tablo oluşturmanız daha iyi olur. – zerkms

+0

Bir MyIsam tablosuna sahip olmak için bunları MyIsam motoruna daha iyi değiştirmeniz gerekmez. –

cevap

6

Bir FK kısıtlaması ile bu tabloya bakın veritabanında tablolar bulmalıdır. Ya da tüm kısıtlamalar damla kadar

SHOW CREATE TABLE `table_in_db_film`\G; 

veya

USE db_of_film_table; 
SHOW TABLE STATUS LIKE 'film'\G 

sonradan gerekli ifadeleri

ALTER TABLE film DROP FOREIGN KEY `ibfk_something`; 

yürütmek kullanmak (tabii sizin kısıt adları ile ibfk_something değiştirin). Bundan sonra, tablo motorunu değiştirebilmelisiniz.

2

Yabancı anahtar kısıtlamalarını kaldırmadan ve böylece bütünlüğü kaybetmeden tablonun motorunu MyISAM'e değiştiremezsiniz.

İki motorun, MyISAM ve InnoDB'nin kullanılması daha iyi olur. Tüm verileri InnoDB'de saklayın ve MyISAM'da tabloyu (veya tam metin araması yapmak istediğiniz sütunları) çoğaltın. Bu, veri çoğaltmanın otomatikleştirilmesi için bazı mekanizmalara (tetikleyiciler) ihtiyaç duyacaktır. Burada

Diğer seçenekler: tüm yabancı anahtar kısıtlamaları sonra MySQL storage engine dilemma

İlgili konular