2012-02-04 6 views
5

Actuellement le type de stockage de la table est innodb, je veux ajouter la recherche de texte complet sur la table qui est seulement possible sur le moteur MYISAM. Je essayé d'utiliser la commande =>alter table film engine = myisam; et obtenu l'erreur:Changement de moteur de stockage de table dans Mysql

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

Aide S'il vous plaît !! Merci.

+0

Supprimez ensuite toutes les contraintes de clé étrangère. Mais vous feriez mieux de créer une autre table avec votre champ de texte à la place. – zerkms

+0

Vous n'avez pas besoin de changer le moteur MyIsam pour avoir une nouvelle table MyIsam –

Répondre

6

Vous devez trouver les tables de la base de données qui font référence à ce tableau par une contrainte FK:

Identifier les contraintes de clé étrangère pour la table. Soit utiliser

SHOW CREATE TABLE `table_in_db_film`\G; 

ou

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

après les déclarations execute nécessaires

ALTER TABLE film DROP FOREIGN KEY `ibfk_something`; 

jusqu'à ce que vous laissez tomber toutes les contraintes (bien sûr remplacer ibfk_something avec vos noms de contrainte). Après cela, vous devriez être en mesure de modifier le moteur de la table.

2

Vous ne pouvez pas modifier le moteur de la table en MyISAM sans supprimer les contraintes de clé étrangère et perdre ainsi l'intégrité.

Il serait préférable d'utiliser les deux moteurs, MyISAM et InnoDB. Conservez toutes les données dans InnoDB et dupliquez la table (ou seulement les colonnes que vous souhaitez rechercher en texte intégral) dans MyISAM. Cela nécessitera un mécanisme (déclencheurs) pour automatiser la duplication des données.

Autres options ici: MySQL storage engine dilemma

Questions connexes