【问题标题】:Changing storage engine of table in Mysql在Mysql中更改表的存储引擎
【发布时间】:2026-02-05 15:05:01
【问题描述】:

目前表的存储类型是 innodb ,我想在表上添加全文搜索,这只能在 MYISAM 引擎上进行。 我尝试使用命令 => alter table film engine = myisam; 并得到了错误:

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

请帮忙!! 谢谢。

【问题讨论】:

  • 然后删除所有外键约束。但是你最好用你的文本字段创建另一个表格
  • 您无需将这些更改为 MyIsam 引擎就可以拥有一个新的 MyIsam 表

标签: mysql


【解决方案1】:

您必须在数据库中找到通过 FK 约束引用此表的表:

确定表的外键约束。要么使用

SHOW CREATE TABLE `table_in_db_film`\G;

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

然后执行必要的语句

ALTER TABLE film DROP FOREIGN KEY `ibfk_something`;

直到您放弃所有约束(当然,将 ibfk_something 替换为您的约束名称)。在此之后,您应该能够更改表引擎。

【讨论】:

    【解决方案2】:

    如果不删除外键约束并因此失去完整性,则无法将表的引擎更改为 MyISAM。

    最好同时使用两个引擎,MyISAM 和 InnoDB。将所有数据保留在 InnoDB 中,并在 MyISAM 中复制表(或只是您想要全文搜索的列)。这将需要一些机制(触发器)来实现数据复制的自动化。

    此处的其他选项:MySQL storage engine dilemma

    【讨论】: